如何在 bash 中强制 subprocess.call 或 os.system 到 运行,而不是破折号?
How do I force subprocess.call or os.system to run in bash, instead of 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"'
即使在 Dash 中也应该可以正常工作。 :-)
(顺便说一下,我想你是想写 "put test.txt"
而不是 $"put test.txt"
。但那既不在这里也不在那里。)
编辑添加:我应该提到你的具体示例很容易以兼容 Dash 的方式重写:
echo "put test.txt" | sftp -i key.pem -P 3912 admin@myServerIP:home/files/
在这种情况下这可能更有意义。但是您很可能会发现 bash -c ...
方法在将来对其他事情很有用。
好的,所以我已经为此苦苦挣扎了一段时间。我正在尝试创建一个自动将文件上传到服务器的 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"'
即使在 Dash 中也应该可以正常工作。 :-)
(顺便说一下,我想你是想写 "put test.txt"
而不是 $"put test.txt"
。但那既不在这里也不在那里。)
编辑添加:我应该提到你的具体示例很容易以兼容 Dash 的方式重写:
echo "put test.txt" | sftp -i key.pem -P 3912 admin@myServerIP:home/files/
在这种情况下这可能更有意义。但是您很可能会发现 bash -c ...
方法在将来对其他事情很有用。