如何强制subprocess.call或os.system在bash中运行,而不是破折号?

时间:2018-01-02 04:24:41

标签: bash python-3.x terminal subprocess dash-shell

好的,所以我一直在努力解决这个问题。我正在尝试创建一个python3脚本,自动将文件上传到服务器。在命令行中,以下命令的作用类似于魅力:

sftp -i key.pem -P 3912 admin@myServerIP:home/files/ <<< $"put test.txt"

但是,当我尝试在我的python脚本中运行该命令时(通过os.system('command')subprocess.call('command')),我不断收到以下错误:

/bin/sh: 1: Syntax error: redirection unexpected

在做了一些研究后,我相信我发现我需要在/ bin / bash中运行命令,而不是默认的破折号,但是我已经尝试了所有的东西,而且对我的生活有所了解弄明白怎么办那!我希望这是一个简单,愚蠢的修复,所以我可以继续前进。谢谢!

1 个答案:

答案 0 :(得分:2)

您可以使用以下命令替换命令:

/bin/bash -c 'sftp -i key.pem -P 3912 admin@myServerIP:home/files/ <<< $"put test.txt"'

即使在Dash中也应该可以正常工作。 : - )

(顺便说一下,我认为你的意思是写"put test.txt"而不是$"put test.txt"。但这不是在这里,也不在那里。)

编辑添加:我应该提一下,您的具体示例很容易以与Dash兼容的方式重写:

echo "put test.txt" | sftp -i key.pem -P 3912 admin@myServerIP:home/files/

在这种情况下可能更有意义。但是你很可能会发现bash -c ...方法对将来的其他事情有用。