我无法使用 subprocess.call() 从 python 脚本运行 shell 命令。如果我复制 python 输出并粘贴到 shell 中,但当我通过 subprocess.call() 调用命令时,下面的测试有效。任何人都可以阐明我的错误/想法吗?我刚开始编程,认为这是“只见树木不见森林”的事情,还有其他关于此的帖子,但我无法将它们应用于我的问题。
我认为 shell 脚本没有得到它的参数。我已经设置shell=True
并尝试了 ' 和 " 围绕带有空格的 args。
import subprocess as s
fromCall = 'MB7UZ-1'
toCall = 'APRS'
path = 'via WIDE1-1'
ax25Port = 'aprs'
command = "/sbin/beacon"
packet = ":Test Beacon 4"
command_args = "-c '{0}' -d '{1} {2}' -s {3} '{4}'".format(fromCall, toCall, path, ax25Port, packet)
s.call([command, command_args], shell=True)
print repr(command_args)
将以下内容打印到控制台
/sbin/beacon -c MB7UZ-1 -d 'APRS via WIDE1-1' -s aprs ':Test Beacon 4'
如果我复制整行并将其粘贴回 shell,/sbin/beacon 程序将按预期工作。
我在这里和谷歌进行了广泛搜索,一些帖子建议将参数转换为 UTF-8 ...
Python 2.7.3 (default, Feb 27 2013, 13:38:49)
[GCC 4.7.2 20120921 (Red Hat 4.7.2-2)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale ; locale.getdefaultlocale()
('en_US', 'UTF-8')
...鉴于上面的输出,我认为这不是问题,但不知何故仍然发现自己提到它!