用子进程包装cmd.exe

use*_*456 3 python windows subprocess

我尝试使用以下程序在Windows下包装cmd.exe但它不起作用,它似乎等待某些东西并且不显示任何内容.知道这里有什么问题吗?

import subprocess

process = subprocess.Popen('cmd.exe', shell=False, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None)  
process.stdin.write("dir\r\n")  
output = process.stdout.readlines()  
print output
Run Code Online (Sandbox Code Playgroud)

Bri*_*ian 5

通常在尝试使用实际命令调用命令提示符时,使用"/ k"参数调用它更简单,而不是通过via stdin传递命令.也就是说,只需调用"cmd.exe/k dir"即可.例如,

from os import *
a = popen("cmd /k dir")
print (a.read())
Run Code Online (Sandbox Code Playgroud)

下面的代码做了同样的事情,虽然缺少一个字符串供你操作,因为它管道直接输出:

from subprocess import *
Popen("cmd /k dir")
Run Code Online (Sandbox Code Playgroud)


gho*_*g74 5

process = subprocess.Popen('cmd.exe /k ', shell=True, stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=None)
process.stdin.write("dir\n")
o,e=process.communicate()
print o
process.stdin.close()
Run Code Online (Sandbox Code Playgroud)

顺便说一下,如果你的实际任务是真的要做目录列表,请使用Python自己的os模块,例如os.listdir()或glob模块......等等.不要不必要地调用这样的系统命令.它使您的代码不可移植.