文档建议不要将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的完整路径?如果是这样的话,我宁愿不这样做,因为我不知道所有的. ex都在哪里。
刚刚尝试了它与完整的文件路径到一个程序(call(['C:/imagemagick/convert.exe'])
)和工程。但问题仍然存在...没有完整的路径你怎么做?只是让它从工作目录执行?
3条答案
按热度按时间mqkwyuun1#
我相信
dir
是www.example.com的一个内置函数cmd.com,而不是一个独立的程序。您需要shell=True或提供与dir
类似功能的程序(如unixtools中的ls.exe程序)。更新为您的编辑:您正在处理的问题听起来与这里描述的已知问题/错误完全相同:http://bugs.python.org/issue8557,这里是python subprocess Popen environment PATH?
当subprocess.call
shell=False
在win32下运行时,www.example.com的行为似乎很奇怪。看起来你至少需要使用convert.exe
而不是convert
,你需要自己搜索PATH
。x8diyxa72#
通过在shell中尝试
dir.exe
可以更好地理解这里的问题:字符串
这意味着
dir
不是%PATH%
中任何地方的可执行文件-相反,它是shell知道如何执行的命令,而无需查找程序。这意味着,根据定义,它永远不会与shell=False
一起工作。qnyhuwrf3#
巧合的是,我有这个确切的问题与确切的可执行文件。这篇文章帮助我指出了原因。
在我看来:
字符串
是解决这个问题的一个简单和便携的解决方案。