这可能看起来很奇怪,但我试图通过subprocess.check_call()在Python脚本中使用Perl的CPAN。由于某种原因,它不起作用,并给出以下错误:
WindowsError: [Error 2] The system cannot find the file specified
当我尝试正常运行命令时。
使用shell = True修复了问题,但我已经读过这可能存在一些安全问题。有人可以向我解释为什么会发生这种情况并且有办法解决它吗?
编辑:示例代码
以下是我使用check_call()运行列表的方法:
packages = {'DateTime':'2','Win32::API':'2','Date::Manip':'2','XML::LibXML':'2','Carp::Assert':'2',
'Digest::CRC':'2','Data::Hexify':'2','Image::ExifTool':'2','File::Mork':'2','DateTime::Format::Strptime':'2',
'Parse::Win32Registry':'2','HTML::Scrubber':'2','Mac::PropertyList':'2','XML::Entities':'2'}
for k,v in packages.iteritems():
try:
res = check_call(shlex.split('cpan install %s' % k), shell=True)
if res == 0:
v = 0
except CalledProcessError:
谢谢!
答案 0 :(得分:0)
subprocess.Popen(),重定向stdout,以便检查输出。
import subprocess as s
import shlex
k = "DateTime"
proc = s.Popen(["cpan", "install", k], stdout=s.PIPE)
output, err = proc.communicate()
print output, err