【发布时间】:2015-03-10 01:09:56
【问题描述】:
这可能看起来很奇怪,但我正在尝试通过 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:
谢谢!
【问题讨论】:
-
您要运行什么命令?它在哪里生活?您是使用完整路径还是仅使用裸名?
-
我正在尝试运行许多命令来安装 perl 包,例如一个是 'cpan install Win32::API'... 都遵循相同的约定,其中 Win32::API 是包名称...这只是裸名,但 cpan 目录在我的系统和用户 %PATH%
-
你能举一个例子来说明你是如何编写你的 check_call() 的吗?
-
编辑了一个例子,感谢您的帮助!
-
使用
cpan的完整路径是否可以在不使用 shell 的情况下工作?
标签: python shell subprocess