¿Es posible enviar una lista de comandos relacionados usando os.system() en Python? Quiero decir, si quiero cambiar el directorio actual a un directorio específico y luego tener una lista de contenidos, ¿cómo puedo hacerlo? (No quiero usar dir "path" - Quiero cambiar el directorio actual y enumerar los directorios)

Nota: Fue solo un ejemplo, ¡quiero saber cómo puedo enviar múltiples comandos! (Algunos comandos relacionados en una fila)

Nota: Python 3.2

0
TheGoodUser 5 sep. 2014 a las 20:18

3 respuestas

La mejor respuesta

Os.system usa el shell del sistema local. Puede hacerlo como sugiere @Rwaing en muchos shells unixy pero no en otros lugares como las ventanas. Una mejor opción es subprocess.call y el parámetro cwd (directorio de trabajo actual)

import subprocess
subprocess.call('dir', shell=True, cwd='somepath')

Como otros han mencionado, si todo lo que realmente quiere hacer es obtener una lista de los archivos, la API de Python existente lo hace bastante bien.

Editar : envío de múltiples comandos

Una forma de enviar múltiples comandos es bombearlos al stdin del shell hijo. Es dependiente de la shell, pero aquí hay un ejemplo de Windows:

import os
import subprocess as subp
p=subp.Popen('cmd.exe', shell=True, stdin=subp.PIPE)
p.stdin.write("""dir
cd "\\program files"
dir
""")
p.stdin.write('exit' + os.linesep)
p.wait()
del p
print 'done'
3
tdelaney 5 sep. 2014 a las 18:32

No hay necesidad de llamadas al sistema aquí. os funciona chdir y listdir cambiará su directorio actual y enumerará los archivos en un directorio respectivamente.

2
Kevin 5 sep. 2014 a las 16:22

Echa un vistazo a os.listdir (ruta): https://docs.python.org/3/library/os.html # os.listdir

Ejemplo:

import os

entries = os.list.dir('/home/foo')
2
Corey Goldberg 5 sep. 2014 a las 16:38