2016-05-05 8 views
0

Ich habe diesen Befehl ein:Python subprocess.Popen in anderem Verzeichnis

grep = subprocess.Popen('head -20'.split(), stdin=subprocess.PIPE, stdout=subprocess.PIPE) 
ls = subprocess.Popen('ls'.split(), stdout=grep.stdin) 
output_lines = grep.communicate()[0] 

Wie kann ich diesen Befehl in anderem Verzeichnis laufen? Zum Beispiel in/home /?

+1

ohne Bezug: Sie könnten 'os.listdir ('/ home') [: 20]' anstelle von 'cd/home; ls | Kopf -20'. Wenn das Verzeichnis möglicherweise eine große Anzahl von Einträgen enthält; Sie könnten stattdessen 'itertools.islice (os.scandir ('/ home'), 20)' verwenden (es sollte funktionieren, selbst wenn es Millionen von Dateien im Verzeichnis gibt). – jfs

Antwort

1

zu vermeiden Um den globalen Prozess zu ändern Arbeitsverzeichnis mit os.chdir() (die Sie nicht wollen, wenn Ihr Programm mehrere Threads verwendet), könnten Sie cwd='/home' Parameter übergeben zu Popen().

1

Der Subprozess erbt das aktuelle Arbeitsverzeichnis des Python-Prozesses. Ändern Sie einfach das Verzeichnis, bevor Sie Popen aufrufen. Zum Beispiel:

import os 

old_dir = os.getcwd() 
os.chdir('/home') 
grep = subprocess.Popen(...) 
os.chdir(old_dir) 
+0

überprüfen Sie bitte diese [URL] (http://stackoverflow.com/help), es wird nützlich sein, um Ihre Content-Qualität zu erhöhen –

0

Mit chdir:

import os 

os.getcwd() 
>> 'a/sample/path' 

os.chdir('/home/') 

os.getcwd() 
>> '/home/' 
Verwandte Themen