2011-12-20 29 views
5

Tôi sử dụng lệnh sau trong bash để thực thi một tập lệnh Python.Lệnh gọi xử lý con Python với các đối số có nhiều trích dẫn

python myfile.py -c "'USA'" -g "'CA'" -0 "'2011-10-13'" -1 "'2011-10-27'" 

Tôi đang viết một tập lệnh Python để bao quanh tập lệnh này. Tôi hiện đang phải sử dụng os.system (tôi biết, nó crappy) vì tôi không thể tìm ra cách để có được các báo giá để làm việc với subprocess.Popen. Các dấu ngoặc đơn bên trong phải được duy trì trong các biến chuỗi được truyền vào.

Ai đó có thể vui lòng giúp tôi xác định cách định dạng biến đầu tiên được chuyển đến tiến trình con. Mở ra.

Trả lời

4

Bạn sẽ có thể khởi động kịch bản của bạn với subprocess.Popen thậm chí với các thông số trích dẫn:

subprocess.Popen([ 
    "/usr/bin/python", 
    "myfile.py", 
    "-c", 
    "'USA'", 
    "-g", 
    "'CA'", 
    "-0", 
    "'2011-10-13'", 
    "-1", 
    "'2011-10-27'", 
]) 
0

bạn đã thử này?

import subprocess 
subprocess.Popen(['python', 'myfile.py', '-c', "'USA'", '-g', "'CA'", '-0', "'2011-10-13'", -1, "'2011-10-27'"]).communicate() 

Bạn có thể sử dụng điều này trong myfile.py để kiểm tra xem những gì bạn nhận được từ bash là giống như những gì bạn nhận được từ subprocess.Popen (trong trường hợp của tôi nó phù hợp):

import sys 
print sys.argv 
8

Bạn không cần để thoát khỏi các giá trị. Để quá trình tất cả mọi thứ được thông qua như là một chuỗi.

Bạn có thể sử dụng các module shlex để tìm ra cách tốt nhất để vượt qua các biến là gì:

import shlex 
shlex.split('python myfile.py -c "USA" -g "CA" -0 "2011-10-13" -1 "2011-10-27"') 
['python', 
'myfile.py', 
'-c', 
'USA', 
'-g', 
'CA', 
'-0', 
'2011-10-13', 
'-1', 
'2011-10-27'] 
+0

Đây là OneWayToDoIt ưa thích (tm). –

+0

Lưu ý rằng điều này không hoạt động đối với môi trường Windows vì shlex có nghĩa là đối với các hệ vỏ Unix. –

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