Вызов подпроцесса Python с аргументами, имеющими несколько кавычек - PullRequest
5 голосов
/ 20 декабря 2011

Я использую следующую команду в bash для выполнения скрипта Python.

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

Я пишу скрипт на Python, чтобы обернуть вокруг него. В настоящее время мне нужно использовать os.system (я знаю, это дерьмо), так как я не могу понять, как заставить кавычки работать с subprocess.Popen. Внутренние одинарные кавычки должны храниться в передаваемых строковых переменных.

Может кто-нибудь помочь мне определить, как отформатировать первую переменную, переданную в subprocess.Popen.

Ответы [ 3 ]

8 голосов
/ 21 декабря 2011

Вам не нужно экранировать значения. В процессе все передается в виде строки.

Вы можете использовать модуль shlex для определения наилучшего способа передачи переменных:

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']
4 голосов
/ 21 декабря 2011

Вы должны иметь возможность запустить скрипт с подпроцессом . Открыть даже с указанными параметрами:

subprocess.Popen([
   "/usr/bin/python", 
   "myfile.py",
   "-c",
   "'USA'",
   "-g",
   "'CA'",
   "-0",
   "'2011-10-13'",
   "-1",
   "'2011-10-27'",
])
0 голосов
/ 21 декабря 2011

Вы пробовали это?

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

Вы можете использовать это в myfile.py, чтобы проверить, что то, что вы получаете от bash, совпадает с тем, что вы получаете от subprocess.Popen (в моем случаеэто соответствует):

import sys
print sys.argv
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...