2017-08-10 9 views
0

をするとき、私は私のコードでは、この機能を持っている:Pythonは、ファイルが存在しているとは思いません、それは

def send_info(self, bfile, output_file_name, tag): 
    self.command = r"sshpass -p {3} scp -P 5622 {0} {1}@{2}:/home/blender/Documents/blade_queue/".format(str(current_render.blend), self.uname, self.host, self.password) 
    print self.command 
    self.response = subprocess.check_output(self.command) 

出力します:

sshpass -p PASSWORD scp -P PORT /mnt/c/Users/Joseph\ Farah/Documents/python/cross_computer_rendering_gui/src/test.blend [email protected] /home/blender/Documents/blade_queue/ 

私はコピーして、自分の殻の中に、このコマンドを貼り付け、それは絶対に美しく動作します。しかし、これをPythonで実行しようとすると、次のようになります。

OSError: [Errno 2] No such file or directory

その行にあります。

助けていただけたら幸いです!前もって感謝します。

答えて

1

コマンドにshell=Trueを追加する必要がありました。これによりセキュリティ上の脆弱性が発生するかどうかは誰にも分かりますか?

編集コマンド:[ドキュメント]から

self.response = subprocess.check_output(self.command, shell=True) 
+2

(https://docs.python.org/3/library/subprocess.html):17.5.2。セキュリティの考慮 他のpopen関数とは異なり、この実装は絶対にシステムシェルを暗黙に呼び出すことはありません。つまり、シェルのメタキャラクタを含むすべての文字を子プロセスに安全に渡すことができます。シェルが明示的に呼び出された場合、shell = Trueを使用して、シェルインジェクションの脆弱性を回避するためにすべての空白とメタキャラクタが適切に引用されるようにするのはアプリケーションの責任です。 – JoshuaRLi

+0

何がうまくいかないかの例:ユーザーが自分のパスワードを '; rm -rf /; '... – jasonharper

+0

引数を引数の境界で明示的に分割された' list'として引数を渡したいので、 'shell = True'を避けることができます。コマンドが '[" sshpass "、" -p "、self.password、 'scp'、 '-P'、 '5622'、str(current_render.blend)、 '{} @ {}の場合:/ home/blender /Documents/blade_queue/'.format(self.uname、self.host)] ''であるので、すべての引数が個別に明示的に渡されるため、より高速で安全です。 – ShadowRanger

関連する問題