Python Popen 困难:找不到文件
我正在尝试使用 python 来运行程序。
from subprocess import Popen
sa_proc = Popen(['C:\\sa\\sa.exe','--?'])
运行这个小片段会出现错误:
WindowsError: [错误2]系统找不到指定的文件
存在,我已直接从资源管理器复制并粘贴exe的绝对路径。 我尝试过其他方法,发现如果我将 EXE 与 python 脚本一起放在源文件夹中并使用“./sa.exe”,那么它就可以工作。 我唯一能想到的是我正在从一个单独的分区(F:)运行 python 脚本(和 python)。
有任何想法吗? 谢谢
I'm trying to use python to run a program.
from subprocess import Popen
sa_proc = Popen(['C:\\sa\\sa.exe','--?'])
Running this small snippit gives the error:
WindowsError: [Error 2] The system cannot find the file specified
The program exists and I have copy and pasted directly from explorer the absolute path to the exe. I have tried other things and have found that if I put the EXE in the source folder with the python script and use './sa.exe' then it works. The only thing I can think of is that I'm running the python script (and python) from a separate partition (F:).
Any ideas?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
正如 文档 所说,“在 Windows 上:Popen类使用 CreateProcess() 来执行子程序,该子程序对字符串进行操作,如果 args 是序列,则将使用 list2cmdline() 方法将其转换为字符串。”。 也许这个方法把事情搞砸了,所以为什么不尝试更简单的方法:
如果仍然失败,那么:在尝试这个之前,
os.environ['COMSPEC']
是什么? 如果将, shell=True
添加到Popen
的参数中,会发生什么?编辑:结果显然是一个简单的拼写错误,因为“sa”实际上是拼写为 SpamAssassin 的程序——double s 两次——而 OP 写的是 spamassasin——一个双 s,但第二次是单 s。
As the docs say, "On Windows: the Popen class uses CreateProcess() to execute the child program, which operates on strings. If args is a sequence, it will be converted to a string using the list2cmdline() method.". Maybe that method is messing things up, so why not try the simpler approach of:
If this still fails, then: what's
os.environ['COMSPEC']
just before you try this? What happens if you add, shell=True
toPopen
's arguments?Edit: turns out apparently to be a case of simple mis-spellling, as 'sa' was actually the program spelled SpamAssassin -- double s twice -- and what the OP was writing was spamassasin -- one double s but a single one the second time.
您可能没有执行 C:\sa\sa.exe 的权限。 您是否尝试过手动运行该程序?
You may not have permission to execute C:\sa\sa.exe. Have you tried running the program manually?