Cómo usar Subproceso en Windows

Estoy intentando guardar el resultado o la función runcmd en la variable Resultado . Esto es lo que he intentado: importar subproceso

def runcmd(cmd): x = subprocess.Popen(cmd, stdout=subprocess.PIPE) Result = x.communicate(stdout) return Result runcmd("dir") 

Cuando ejecuto este código, obtengo este resultado:

 Traceback (most recent call last): File "C:\Python27\MyPython\MyCode.py", line 7, in  runcmd("dir") File "C:\Python27\MyPython\MyCode.py", line 4, in runcmd x = subprocess.Popen(cmd, stdout=subprocess.PIPE) File "C:\Python27\lib\subprocess.py", line 679, in __init__ errread, errwrite) File "C:\Python27\lib\subprocess.py", line 893, in _execute_child startupinfo) WindowsError: [Error 2] The system cannot find the file specified 

¿Qué podría hacer para solucionar esto?

Creo que lo que estás buscando es os.listdir ()

Echa un vistazo al módulo del sistema operativo para más información

un ejemplo:

 >>> import os >>> l = os.listdir() >>> print (l) ['DLLs', 'Doc', 'google-python-exercises', 'include', 'Lib', 'libs', 'LICENSE.txt', 'NEWS.txt', 'python.exe', 'pythonw.e xe', 'README.txt', 'tcl', 'Tools', 'VS2010Cmd.lnk'] >>> 

También puedes leer el resultado en una lista:

 result = [] process = subprocess.Popen('dir', shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE ) for line in process.stdout: result.append(line) errcode = process.returncode for line in result: print(line) 

Por lo que sé, dir es un comando incorporado del shell en Windows y, por lo tanto, no es un archivo disponible para su ejecución como un progtwig. Que es probablemente la razón por la que subprocess.Popen no puede encontrarlo. Pero puede intentar agregar shell=True a la Popen() del Popen() esta manera:

 def runcmd(cmd): x = subprocess.Popen(cmd, stdout=subprocess.PIPE, shell=True) return x.communicate(stdout) runcmd("dir") 

Si shell=True no ayuda, no tienes suerte al ejecutar dir directamente. Pero luego puedes hacer un archivo .bat y llamar a dir lugar de allí, y luego invocar ese archivo .bat desde Python.

PS revisa el PEP8 también 🙂 por ejemplo, las variables locales deben comenzar con una letra minúscula en Python (es decir, Result => result ).

PPS Como señaló Mark Ransom en un comentario, puedes usar ['cmd', '/c', 'dir'] como el valor de cmd lugar de .bat hack si shell=True no soluciona el problema.