当前位置: 首页 > 面试题库 >

在Python中使用subprocess.call('dir',shell = True)时找不到指定的文件

景轶
2023-03-14
问题内容

安装了32位python 2.7的64位系统中,我尝试执行以下操作:

import subprocess
p = subprocess.call('dir', shell=True)
print p

但这给了我:

Traceback (most recent call last):
  File "test.py", line 2, in <module>
    p = subprocess.call('dir', shell=True)
  File "C:\Python27\lib\subprocess.py", line 522, in call
    return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 709, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
  WindowsError: [Error 2] The system cannot find the file specified

如果我在航站楼里做…

dir

…它当然会打印当前的文件夹内容。

我试图将shell参数更改为shell = False。

编辑:实际上,我不能使用调用路径上的任何可执行文件subprocess.call()。该语句p = subprocess.call('dir', shell=True)在另一台机器上运行良好,我认为这是相关的。

如果我做

 subprocess.call('PATH', shell=True)

然后我得到

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    subprocess.call('PATH', shell=True)
  File "C:\Python27\lib\subprocess.py", line 522, in call
     return Popen(*popenargs, **kwargs).wait()
  File "C:\Python27\lib\subprocess.py", line 709, in __init__
    errread, errwrite)
  File "C:\Python27\lib\subprocess.py", line 957, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

如果我做:

import os
print os.curdir

然后我得到

.

以上所有操作均在以管理员模式启动的终端中执行。


问题答案:

我认为您的COMSPEC环境变量可能有问题:

>>> import os
>>> os.environ['COMSPEC']
'C:\\Windows\\system32\\cmd.exe'
>>> import subprocess
>>> subprocess.call('dir', shell=True)

    (normal output here)

>>> os.environ['COMSPEC'] = 'C:\\nonexistent.exe'
>>> subprocess.call('dir', shell=True)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "c:\Python27\lib\subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "c:\Python27\lib\subprocess.py", line 679, in __init__
    errread, errwrite)
  File "c:\Python27\lib\subprocess.py", line 896, in _execute_child
    startupinfo)
WindowsError: [Error 2] The system cannot find the file specified

正如追溯所指出的那样,我通过深入subprocess.py并研究_execute_child函数来发现了这个潜在问题。在这里,您将找到一个以if shell:该块开头的块,它将在环境中搜索所述变量,并使用它来创建用于启动该过程的参数。



 类似资料:
  • 问题内容: 我收到以下错误: 我的代码是: Windows 7,64位。Python 3.x最新,稳定。 有任何想法吗? 谢谢, 问题答案: 当命令是内置的shell时,请在调用中添加“ shell = True”。 例如,您将输入: 引用文档: 在Windows上唯一需要指定shell = True的时间是将要执行的命令内置到shell中(例如dir或copy)。您不需要shell = True

  • 问题内容: 我正在尝试获取python的subprocess.call方法以通过列表(由字符串序列组成)接受一些args命令,如python文档中所建议。为了在将此行为放到我的实际脚本中之前对其进行探索,我打开了IPython,运行了一些涉及shell设置和args命令不同组合的命令,并得到以下行为: 似乎无论何时shell = True,输出似乎都与以下内容相同: 我很困惑;当我设置shell

  • 问题内容: 我正在从另一个python脚本(A)调用python脚本(B)。 使用subprocess.call,如何将B的标准输出重定向到指定的文件? 我正在使用python 2.6.1。 问题答案: 将文件作为参数传递给:

  • 我有一个这样的代码 但是为什么执行它给了我这个: 正确的做法是什么?

  • 问题内容: 我有一个很长的单行shell命令,将由Python调用。代码如下: 这些代码有效,但始终会这样抱怨: 根据先前的答案,我需要使用更长的脚本来完成此操作,例如: 我的问题是: (1)“第二种方式”是否会比“第一种方式”慢 (2)如果无论如何我都必须以“第一种方式”写(因为这样写起来更快),如何避免这样的抱怨 (3)我不应该以“第一方式”写作的最令人信服的原因是什么 问题答案: 如果您的输

  • 喂, 我尝试使用doxygen从一组文件夹生成代码文档。我的文件夹结构是这样的: 然后在配置文件中我在“default”配置文件中有以下设置(在这里的文档和其他问题中有说明): 我正在Linux Ubuntu(12.04LTS)上使用Doxygen1.8.4。 提前感谢您的提示和提示。