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

Tôi làm điều này. Tuy nhiên, bên trong run.sh của tôi, tôi có đường dẫn "tương đối". Vì vậy, tôi phải "cd" vào thư mục đó, và sau đó chạy kịch bản lệnh shell. Làm thế nào để làm điều đó?Làm cách nào để chạy tập lệnh bash bên trong Python, nhưng hoạt động như thể nó đang chạy từ một thư mục khác?

+0

tôi không phải là một chuyên gia về tiến trình con, nhưng bạn có thể làm: subprocess.call ([ "" cd/chạy/lối; /home/blah/trunk/blah/run.sh ","/tmp/ad_xml ","/tmp/video_xml "]) ?? – inspectorG4dget

Trả lời

12

Sử dụng cwd lập luận để subprocess.call()

Từ các tài liệu ở đây: 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 .

Ví dụ:

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

Vì vậy, tôi nên có một subprocess.call trên dòng đó? – TIMEX

+0

Điều này không hoạt động subprocess.call (["cwd/home/blah/trunk/blah /"]) Nó nói OSError: [Errno 2] Không có tệp hoặc thư mục như vậy – TIMEX

+0

Bạn đặt cwd làm đối số Python có tên. Tôi đã thêm một ví dụ vào câu trả lời . – payne

1

Vâng, bạn có thể sử dụng subprocess.Popen với Shell = True và PT = "bạn mong muốn thư mục làm việc"

EDIT: Nó xuất hiện cuộc gọi mà có lẽ cùng vì vậy chỉ cần thiết lập một cuộc tranh luận cwd sẽ làm việc:

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

bạn có thể cung cấp thư mục làm việc của bạn như thế này:

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

Các vấn đề liên quan