2011-01-29 10 views
5
subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"]) 

Robię to. Jednak w moim run.sh mam "względne" ścieżki. Muszę więc "cd" do tego katalogu, a następnie uruchomić skrypt powłoki. Jak mogę to zrobić?Jak uruchomić skrypt bash w Pythonie, ale działa on tak, jakby działał z innego katalogu?

+0

nie jestem ekspertem podproces, ale można zrobić: subprocess.call ([ "" cd/run/ścieżkę; /home/blah/trunk/blah/run.sh ","/tmp/ad_xml ","/tmp/video_xml "]) ?? – inspectorG4dget

Odpowiedz

12

pomocą cwd argumentu subprocess.call()

Z Dokumenty tutaj: http://docs.python.org/library/subprocess.html

If cwd is not None, the child’s current directory will be changed to cwd before it is executed. Note that this directory is not considered when searching the executable, so you can’t specify the program’s path relative to cwd .

przykład:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd='/tmp') 
+0

Więc powinienem mieć podproces.call powyżej tej linii? – TIMEX

+0

To nie działa subprocess.call (["cwd/home/bla/trunk/blah /"]) Mówi OSError: [Errno 2] Brak takiego pliku lub katalogu – TIMEX

+0

Umieszczasz cwd jako nazwany argument Pythona. Dodałem przykład do odpowiedzi . – payne

1

Cóż, można użyć subprocess.Popen z Shell = True i CWD = „Twój pożądany katalog roboczy”

EDIT: Wydaje się, że rozmowa ma te same argumenty, więc po prostu ustawienie argumentu CWD pracy:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd="PATH") 
1

można podać swój katalog roboczy tak:

subprocess.call(["/home/blah/trunk/blah/run.sh", "/tmp/ad_xml", "/tmp/video_xml"], cwd="/home/blah/trunk/blah")

Powiązane problemy