Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python subprocess call with arguments having multiple quotations

I use the following command in bash to execute a Python script.

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

I'm writing a Python script to wrap around this one. I'm currently having to use os.system (I know, it's crappy) since I can't figure out how to get the quotes to work with subprocess.Popen. The inner single quotes must be maintained in the string variables that are passed in.

Can someone please help me determine how to format the first variable passed to subprocess.Popen.

like image 237
user451500 Avatar asked Dec 20 '11 19:12

user451500


2 Answers

You don't need to escape the values. To the process everything is passed as a string.

You can use the shlex module to figure out what is the best way to pass variables:

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']
like image 200
fabrizioM Avatar answered Nov 13 '22 10:11

fabrizioM


You should be able to launch your script with subprocess.Popen even with quoted parameters :

subprocess.Popen([
   "/usr/bin/python", 
   "myfile.py",
   "-c",
   "'USA'",
   "-g",
   "'CA'",
   "-0",
   "'2011-10-13'",
   "-1",
   "'2011-10-27'",
])
like image 20
Cédric Julien Avatar answered Nov 13 '22 11:11

Cédric Julien