如何强制subprocess.call或os.system在bash中运行,而不是dash



好的,所以我已经为此苦苦挣扎了一段时间。我正在尝试创建一个自动将文件上传到服务器的 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 中运行命令,而不是默认的破折号,但我已经尝试了一切,并且终生不知道该怎么做!我希望这是一个简单而愚蠢的修复,这样我就可以上路了。谢谢!

您可以将命令替换为以下命令:

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

即使在达世币中也应该可以正常工作。

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


编辑补充:我应该提到您的特定示例很容易以与 Dash 兼容的方式重写:

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

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

最新更新