Python Popen() 的问题(语法?)
Issues with Python Popen() (Syntax?)
我尝试通过 Popen() 从 Python 脚本启动的程序有一个小问题(我知道 Popen() 可能不理想,但我正在使用一些模板在其他情况下,并希望遵循惯例)。
我有点困惑,因为我似乎无法将以下内容发送给 运行:
root = os.getcwd()
bin = 'my_executable.exe'
bin_fullpath = os.path.join(root,bin)
params = 'Option C -f Module -y -q'
p = subprocess.Popen([bin_fullpath,params])
out = p.communicate()
程序启动,但退出时出现错误代码 1(我用 check_call 检查过)。
但是,当我放弃上面的方法,直接提供我需要的整个字符串运行,如下:
subprocess.Popen(r'C:\Users\me\Desktop\path\to\tool\my_executable.exe Option C -f Module -y -q')
程序按预期执行。显然我的语法有问题,但我不知道是什么。 . .
任何见解将不胜感激!
当您使用 "list of arguments" 格式时,每个都必须是自己的字符串,作为列表的单独成员,如下所示:
params = ['Option', 'C', '-f', 'Module', '-y', '-q']
p = subprocess.Popen([bin_fullpath, *params])
当你将它们全部放在一个字符串中时,你是在告诉 subprocess
它们都是一个大论点。1 所以,与其粗暴相当于此命令行:
C:\Users\me\Desktop\path\to\tool\my_executable.exe Option C -f Module -y -q
…它大致相当于这个:
C:\Users\me\Desktop\path\to\tool\my_executable.exe "Option C -f Module -y -q"
如果不清楚为什么不同,请考虑以下示例:
fix.exe "My Pictures\picture1.jpg"
fix.exe My Pictures\picture1.jpg
第一个修图,My Pictures\picture1.jpg
。二是修复两张图片,My
,Pictures\picture1.jpg
。
有关 args
参数的更多详细信息,请参阅 Frequently Used Arguments。请注意 "one big string" 版本在没有 shell=True
的情况下实际上是无效的——尽管它恰好通常适用于 Windows.
1.在 Windows 上,事情比这复杂一点,因为 subprocess
实际上必须获取所有参数,并弄清楚如何将它们放在一个字符串中,以便将它们解析回实际按照您要求的方式分隔值。不过没关系。
我尝试通过 Popen() 从 Python 脚本启动的程序有一个小问题(我知道 Popen() 可能不理想,但我正在使用一些模板在其他情况下,并希望遵循惯例)。
我有点困惑,因为我似乎无法将以下内容发送给 运行:
root = os.getcwd()
bin = 'my_executable.exe'
bin_fullpath = os.path.join(root,bin)
params = 'Option C -f Module -y -q'
p = subprocess.Popen([bin_fullpath,params])
out = p.communicate()
程序启动,但退出时出现错误代码 1(我用 check_call 检查过)。
但是,当我放弃上面的方法,直接提供我需要的整个字符串运行,如下:
subprocess.Popen(r'C:\Users\me\Desktop\path\to\tool\my_executable.exe Option C -f Module -y -q')
程序按预期执行。显然我的语法有问题,但我不知道是什么。 . .
任何见解将不胜感激!
当您使用 "list of arguments" 格式时,每个都必须是自己的字符串,作为列表的单独成员,如下所示:
params = ['Option', 'C', '-f', 'Module', '-y', '-q']
p = subprocess.Popen([bin_fullpath, *params])
当你将它们全部放在一个字符串中时,你是在告诉 subprocess
它们都是一个大论点。1 所以,与其粗暴相当于此命令行:
C:\Users\me\Desktop\path\to\tool\my_executable.exe Option C -f Module -y -q
…它大致相当于这个:
C:\Users\me\Desktop\path\to\tool\my_executable.exe "Option C -f Module -y -q"
如果不清楚为什么不同,请考虑以下示例:
fix.exe "My Pictures\picture1.jpg"
fix.exe My Pictures\picture1.jpg
第一个修图,My Pictures\picture1.jpg
。二是修复两张图片,My
,Pictures\picture1.jpg
。
有关 args
参数的更多详细信息,请参阅 Frequently Used Arguments。请注意 "one big string" 版本在没有 shell=True
的情况下实际上是无效的——尽管它恰好通常适用于 Windows.
1.在 Windows 上,事情比这复杂一点,因为 subprocess
实际上必须获取所有参数,并弄清楚如何将它们放在一个字符串中,以便将它们解析回实际按照您要求的方式分隔值。不过没关系。