2017-08-26 4 views
0

私はリモートLinuxのファイルを変更しようとしており、Paramikoを使ってそのファイルを同じマシン上の別のものにリダイレクトしようとしています。それはシンプルでなければならないが、私は明らかにここで何かを逃している。私はその後、別のファイルにリダイレクトタブごとに空白を置き換えるために、TRのコマンドを使用します。Paramikoを使ってリモートマシン上のファイルを変更する

command= "tr ' ' '\t' <file1 .txt> file2.txt" 

このコマンドを実際にシェル内で実行された場合に正常に動作しますが、私はSSHを介してそれを送信するとき:

(stdin, stdout, stderr) = ssh.exec_command(command) 

空のファイルを作成し、出力をstdoutにリダイレクトします。誰が私になぜこのことが起こっているのかを説明することはできますか?私はドキュメントを見ようとしましたが、解決策を見つけることができませんでした。

答えて

0

あなたはあなたのコマンドの前後に引用符を置く必要があります。

command='tr " " "\t" </tmp/file1.txt> /tmp/file2.txt' 
+0

そうだね、私は自分のオリジナルのポストにそれを置くことを忘れてしまいました。しかし、それは問題ではありませんでした。なぜなら私はすでに自分のコードでそれをしていたからです。 – nstojsic

+0

このコマンドは、ssh.exec_command()に入れるとうまく動作します。 file1.txtが読み込まれ、file2.txtがリモートホストに書き込まれます。それでも問題はありますか? – Marsu

+0

はい。私は問題の解決方法がわかりませんが、なぜこれが起こっているのかという理由を発見したと思います。コマンドを単独で実行すると、正常に動作します。しかし、最初にファイルの絶対パスを見つけるコマンドを実行すると、コンテンツがstdoutにリダイレクトされます。 exec_command()のドキュメントを調べると、「新しいチャンネルが開き、要求されたコマンドが実行されます。 – nstojsic

関連する問題