我试图做一个Mac版本的程序,在Windows下运行良好,使用Python 2.7。在Mac(在VirtualBox中运行的OS X El Capitan)下,它失败了,因为我传递给shell的参数无法正确识别。Python 2 subprocess参数错误在Mac
原始代码:
for item in source_files:
# core process
output = sub.Popen(["mhl", "verify", "-vv", "-f", item, ">", text_report],
shell=True,
stdout=sub.PIPE,
stderr=sub.PIPE)
stdout_value, stderr_value = output.communicate()
在Mac只有 'MHL' 的说法是公认的,所以我尝试这样做:
sub.Popen(['mhl verify -vv -f', item, '>', text_report]
现在命令工作,但该项目(一.mhl文件)不承认,所以我尝试这样做:
sub.Popen(['mhl verify -vv -f', '/Users/simon/Documents/Documents.mhl', '>', text_report]
这:
sub.Popen(['mhl verify -vv -f', r'/Users/simon/Documents/Documents.mhl', '>', text_report]
同样的结果,它告诉我一个mhl文件应该遵循'-f'参数。如果我直接将项目添加到第一个参数,它工作正常:
sub.Popen(['mhl verify -vv -f /Users/simon/Documents/Documents.mhl', '>', text_report]
我在这里错过了什么?
感谢您的回答,但它不起作用,与原始代码一样,只有'mhl'参数被识别,它告诉我'参数的数量无效'。实际上'mhl verify -vv -f'被正确识别为使用'verify -vv -f'参数调用mhl可执行文件,但它告诉我一个mhl文件应该遵循'-f'参数。 –
@SimonTheChain:你也传入'item','>'和'text_report'。 –
@SimonTheChain:更新;我错过了你有'shell = True'设置。你仍然有一个命令'mhl verify -vv -f item'在这里执行。 –