我正在使用Windows和32位Python 2.7。
我已经读过很多文章,涉及使Python中的子流程模块正常工作-使shell = True,单个字符串与字符串列表,使用原始字符串等。我感到困惑的是,Python不仅无法生成我正在执行的程序的输出,但也无法运行文档中介绍的某些命令。
例如,当我尝试使用https://docs.python.org/2/library/subprocess.html#subprocess.check_call中引入的“ subprocess.check_call([” ls“,” -l“])”“ python交互式控制台,它会产生“ WindowsError:[错误2]系统找不到指定的文件”。
同样,当我尝试使用文档中确切出现的“ subprocess.call([“ ls”,“ -l”]))“时,Python再次生成” WindowsError:[错误2],系统找不到指定的文件“ 错误。如果我使用“ subprocess.call([” ls“,” -l“],shell = True)”,它只会正确执行并返回退出状态1,这与我在文档页面上看到的内容不同。
更重要的是,有一个Windows可执行程序,我希望通过Python执行。我已经确认该程序可以在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)
当我打印(输出,错误)时,这将生成一个空字符串对的元组。更有趣的是,当传入的图像文件完全乱码时,该程序以相同的方式执行并产生相同的输出,这意味着参数甚至没有正确传入。
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)
关于子进程模块处理的参数,我是否缺少某些内容?
ls
是类似Unix的系统的命令,在Windows下不存在。几乎等价的命令将是cmd /c dir
因为dir
是的内部命令cmd
。
在Windows下,最好先在Windows下直接执行命令cmd
,然后再传递一个命令行Popen
(cmd /c
如果该命令是cmd
内部命令,则首先添加),这样可能会更好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句