Skip to main content
 首页 » 编程设计

Python 为包含 ("' { "和 : characters 的变量赋值

2025年05月04日14wuhuacong

我有以下代码:

  import subprocess 
    cmd = curl -X POST -H "Content-Type: application/json" -d '{ "auth_token": "e91a0ffe758c194f0d1d5896eb4daed0", "widget": "79c08a7e70f0253c3da2fab39e7cb89b", "title": "Something", "text": "Some text", "moreinfo": "Subtitle" }' http://collector.superviso.com 
    subprocess.call(cmd) 

我正在尝试为导致语法错误的变量赋值。这是发生的事情:

>>> cmd = curl -X POST -H "Content-Type: application/json" -d '{ "auth_token": "auth_token", "widget": "widget_id", "title": "Something", "text": "Some text", "moreinfo": "Subtitle" }' http://domain.com 
  File "<stdin>", line 1 
    cmd = curl -X POST -H "Content-Type: application/json" -d '{ "auth_token": "auth_token", "widget": "widget_id", "title": "Something", "text": "Some text", "moreinfo": "Subtitle" }' http://domain.com 
                     ^ 
SyntaxError: invalid syntax 

提前谢谢你。

更新01

三重引号字符串确实让我分配了值但子过程不起作用

>>> cmd = """curl -X POST -H "Content-Type: application/json" -d '{ "auth_token": "e91a0ffe758c194f0d1d5896eb4daed0", "widget": "329bdbea887ad8e10e4e496f7a60f898", "title": "Something", "items":[{"label": "BOUGHT BREAD FOR", "value": "$999.99"}, {"label": "SOLD WATER FOR", "value": "$9,001.00"}] }' http://collector.superviso.com """ 
>>> subprocess.call(cmd) 
Traceback (most recent call last): 
  File "<stdin>", line 1, in <module> 
  File "/usr/lib/python2.7/subprocess.py", line 486, in call 
    return Popen(*popenargs, **kwargs).wait() 
  File "/usr/lib/python2.7/subprocess.py", line 672, in __init__ 
    errread, errwrite) 
  File "/usr/lib/python2.7/subprocess.py", line 1201, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

更新02

感谢 Adam 的帖子(见上文),我能够在不分配任何变量的情况下发送请求:

subprocess.call([ 
    'curl', 
    '-X', 
    'POST', 
    '-H', 
    'Content-Type: application/json', 
    '-d', 
    '{ "auth_token": "e91a0ffe758c194f0d1d5896eb4daed0", "widget": "79c08a7e70f0253c3da2fab39e7cb89b", "title": "Something", "text": "Some text", "moreinfo": "Subtitle" }', 
    'http://collector.superviso.com' 
    ]) 

请您参考如下方法:

subprocess.call 还采用参数列表而不是单个平面参数字符串。查看subprocess documentation .使用它比担心正确引用要容易得多。例如:

subprocess.call([ 
    'curl', 
    '-X', 
    'POST', 
    '-H', 
    'Content-Type: application/json', 
    '-d', 
    '{ "auth_token": "e91a0ffe758c194f0d1d5896eb4daed0", "widget": "79c08a7e70f0253c3da2fab39e7cb89b", "title": "Something", "text": "Some text", "moreinfo": "Subtitle" }', 
    'http://collector.superviso.com' 
    ])