from subprocess import *
test = subprocess.Popen('ls')
print test
当我尝试运行这个简单的代码时,我得到一个错误窗口,上面写着:
WindowsError: [Error 2] The system cannot find the file specified
我不知道为什么我不能让这个简单的代码工作并且令人沮丧,任何帮助将不胜感激!
from subprocess import *
test = subprocess.Popen('ls')
print test
当我尝试运行这个简单的代码时,我得到一个错误窗口,上面写着:
WindowsError: [Error 2] The system cannot find the file specified
我不知道为什么我不能让这个简单的代码工作并且令人沮丧,任何帮助将不胜感激!
看起来您想存储subprocess.Popen()
调用的输出。
有关详细信息,请参阅子流程 - Popen.communicate(input=None)
。
>>> import subprocess
>>> test = subprocess.Popen('ls', stdout=subprocess.PIPE)
>>> out, err = test.communicate()
>>> print out
fizzbuzz.py
foo.py
[..]
但是 Windows shell (cmd.exe) 没有ls
命令,但还有另外两种选择:
使用os.listdir()
- 这应该是首选方法,因为它更容易使用:
>>> import os
>>> os.listdir("C:\Python27")
['DLLs', 'Doc', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe
', 'pythonw.exe', 'README.txt', 'tcl', 'Tools', 'w9xpopen.exe']
使用 Powershell - 默认安装在较新版本的 Windows (>= Windows 7) 上:
>>> import subprocess
>>> test = subprocess.Popen(['powershell', '/C', 'ls'], stdout=subprocess.PIPE)
>>> out, err = test.communicate()
>>> print out
Directory: C:\Python27
Mode LastWriteTime Length Name
---- ------------- ------ ----
d---- 14.05.2013 16:00 DLLs
d---- 14.05.2013 16:01 Doc
[..]
使用 cmd.exe 的 Shell 命令将是这样的:
test = subprocess.Popen(['cmd', '/C', 'ipconfig'], stdout=subprocess.PIPE)
有关更多信息,请参阅:
有用且简洁的子进程模块 - 在终端模拟器中启动命令 - Windows
笔记:
shell=True
,因为它存在安全风险。shell=True
Python 中的 subprocess.Popen 中使用?from module import *
. 看看为什么在你不应该使用的语言结构subprocess.Popen()
. 同意 timss;Windows 没有ls
命令。如果您想要像ls
Windows 上的目录列表,请使用dir /B
单列dir /w /B
或多列。或者只是使用os.listdir
. 如果您确实使用dir
,则必须使用 启动子进程subprocess.Popen(['dir', '/b'], shell=True)
。如果要存储输出,请使用subprocess.Popen(['dir', '/b'], shell=True, stdout=subprocess.PIPE)
. 而且,我使用的原因shell=True
是,由于dir
是内部 DOS 命令,因此必须使用 shell 来调用它。/b 去除标题,/w 强制多列输出。