![](/img/trans.png)
[英]Python subprocess.call fails on windows without shell=True
[英]How to use subprocess.call without shell=True
这些文档建议不要将subprocess.call
与shell=True
,但是,当我尝试做一些简单的事情时,
call(['convert'])
我收到一个错误:
必须指定文件系统
当我通过cmd.exe运行相同的命令时,我得到
C:\Users\Mark>convert
Version: ImageMagick 6.7.3-6 2011-11-10 Q16 http://www.imagemagick.org
...
等等,即它实际上在运行。
那么是什么call
干什么? 为什么要查找文件?
它需要.exe的完整路径吗? 如果是这样,我不愿意这样做,因为我不知道所有.exe的位置。
只需尝试使用程序的完整文件路径( call(['C:/imagemagick/convert.exe'])
)就可以了。 但是问题仍然存在……如果没有完整的路径,您怎么办? 只是从工作目录执行吗?
我相信dir
是cmd.com的内置函数,而不是独立程序。 您将需要shell = True或提供与dir
类似功能的程序(例如unixtools中的ls.exe程序)。
为您的编辑更新:您正在处理的内容听起来完全像此处所述的已知问题/错误: http : //bugs.python.org/issue8557以及此处的python子进程Popen环境PATH?
在win32下,当shell=False
时,似乎subprocess.call的行为很奇怪。 看来您至少需要使用convert.exe
而不convert
并且需要自己搜索PATH
。
通过在shell中尝试dir.exe
可以更好地理解这里的问题:
C:\Users\lvc>dir.exe
Volume in drive C has no label.
Volume Serial Number is 4B8C-511A
Directory of C:\Users\lvc
File Not Found
这意味着dir
在%PATH%
任何位置都不是可执行文件-而是shell不知道如何查找程序的命令。 这意味着按照定义,它将永远不会与shell=False
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.