我正在使用Windows和32位Python 2.7。
我已经阅读了很多帖子,涉及让Python中的子进程模块正常工作 - 使shell = True,单个字符串与字符串列表,使用原始字符串等。我感到困惑的是Python不仅失败了生成我正在执行的程序的输出,但也无法运行文档中介绍的一些命令。
例如,当我尝试使用python交互式控制台中https://docs.python.org/2/library/subprocess.html#subprocess.check_call中引入的“subprocess.check_call([”ls“,” - l“])”时,会产生“WindowsError:[错误2]系统找不到指定的文件“。
同样,当我尝试使用“subprocess.call([”ls“,” - l“])”因为它出现在文档中时,Python再一次产生“WindowsError:[错误2]系统无法找到文件指定“错误。它只能正确执行并返回退出状态1如果我使用“subprocess.call([”ls“,” - l“],shell = True)”,这与我在doc页面上读到的不同。
更重要的是,我希望通过Python执行Windows可执行程序。我已经在Cygwin终端中正确确认了程序功能,它在用Python执行时不打印任何输出(我注意到这个问题已被问过几次,但解决方案对我来说不起作用)。
import subprocess as sub
rt = sub.Popen([r'C:/Users/Y L/Documents/ssocr', '-d', '-1', 'Sample.JPG'], stdin = sub.PIPE, stdout = sub.PIPE, stderr = sub.PIPE)
out, err = rt.communicate()
print(out, err)
当我打印(out,err)时,这会生成一个空字符串对的元组。更有趣的是,程序以相同的方式执行并在传入的图像文件是完全乱码时产生相同的输出,这意味着参数甚至没有正确传递。
import subprocess as sub
rt = sub.Popen([r'C:/Users/Y L/Documents/ssocr', '-d', '-1', 'asdfasdf.JPG'], stdin = sub.PIPE, stdout = sub.PIPE, stderr = sub.PIPE)
out, err = rt.communicate()
print(out, err)
我是否缺少关于参数的内容由子进程模块处理?
答案 0 :(得分:1)
ls
是Unix系统的命令,在Windows下不存在。几乎等效的命令是cmd /c dir
,因为dir
是cmd
的内部命令。
在Windows下,您可以直接在cmd
窗口下直接执行命令,然后将单个命令行传递到Popen
(并在{1}}添加cmd /c
command是cmd
内部命令)