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
その行にあります。
助けていただけたら幸いです!前もって感謝します。
(https://docs.python.org/3/library/subprocess.html):17.5.2。セキュリティの考慮 他のpopen関数とは異なり、この実装は絶対にシステムシェルを暗黙に呼び出すことはありません。つまり、シェルのメタキャラクタを含むすべての文字を子プロセスに安全に渡すことができます。シェルが明示的に呼び出された場合、shell = Trueを使用して、シェルインジェクションの脆弱性を回避するためにすべての空白とメタキャラクタが適切に引用されるようにするのはアプリケーションの責任です。 – JoshuaRLi
何がうまくいかないかの例:ユーザーが自分のパスワードを '; rm -rf /; '... – jasonharper
引数を引数の境界で明示的に分割された' 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