无法将变量传递给python脚本

无法将变量传递给python脚本,python,curl,Python,Curl,我有以下代码在JIRA中创建子任务 inf = open('/var/lib/rundeck/output.txt') for line in inf: print line headers = {'Content-Type': 'application/json',} data = '{"fields":{"project":{"key":"TECH"},"parent":{"key":line},

我有以下代码在JIRA中创建子任务

inf = open('/var/lib/rundeck/output.txt')
for line in inf:
                print line
                headers = {'Content-Type': 'application/json',}
                data = '{"fields":{"project":{"key":"TECH"},"parent":{"key":line},"summary":"Create AD List ","description":"","issuetype":{"name":"Sub-task"},"customfield_10107":{"id":"10400"}}}'
                response = requests.post('https://jira.company.com/rest/api/latest/issue/', headers=headers, data=data, auth=('user', 'pass'))

inf.close()
我有一个文件(output.txt),python为找到的每一行(TECH-XXX)打印所有行,它应该触发上面的脚本

当我硬编码key
“key”:“TECH-1147”
而不是
“key”:line
脚本生成子任务时,但在替换变量(line)时,什么也不会发生

uputut.txt:

TECH-1234
TECH-1345
.........
我传达了以下代码:

curl -D- -u: user:Pass -X POST --data "{\"fields\":{\"project\":{\"key\":\"TECH\"},\"parent\":{\"key\":\"$project\"},\"summary\":\"Create AD List of all Active Users\",\"description\":\"some description\",\"issuetype\":{\"name\":\"Sub-task\"},\"customfield_10107\":{\"id\":\"10400\"}}}" -H "Content-Type:application/json" https://company.com/rest/api/latest/issue/
用这个

还尝试了{
“键”:“'+line+'”}

获取
{u'errorMessages':[u'问题不再存在]],u'errors':{}


问题是TECH-1247(变量),它肯定存在

未解释为变量。这只是一根绳子。一种解决方案是使用
%
运算符设置字符串格式:

inf = open('/var/lib/rundeck/output.txt')
for line in inf:
    print line
    headers = {'Content-Type': 'application/json',}
    data = '{"fields":{"project":{"key":"TECH"},"parent":{"key":%s},"summary":"Create AD List ","description":"","issuetype":{"name":"Sub-task"},"customfield_10107":{"id":"10400"}}}' % line
    response = requests.post('https://jira.corp.hentsu.com/rest/api/latest/issue/', headers=headers, data=data, auth=('user', 'pass'))

inf.close()

请注意,
替换为
%s
,然后将
%line
添加到末尾。这将用变量的值替换
%s

不被解释为变量。这只是一根绳子。一种解决方案是使用
%
运算符设置字符串格式:

inf = open('/var/lib/rundeck/output.txt')
for line in inf:
    print line
    headers = {'Content-Type': 'application/json',}
    data = '{"fields":{"project":{"key":"TECH"},"parent":{"key":%s},"summary":"Create AD List ","description":"","issuetype":{"name":"Sub-task"},"customfield_10107":{"id":"10400"}}}' % line
    response = requests.post('https://jira.corp.hentsu.com/rest/api/latest/issue/', headers=headers, data=data, auth=('user', 'pass'))

inf.close()

请注意,
替换为
%s
,然后将
%line
添加到末尾。这将用变量
行的值替换
%s

可能尝试使用
rstrip()
来触发任何尾随空格/换行符和
json.dumps()
以使数据不会以表单编码的形式传递

import requests
import json

with open("output.txt", "rb") as infile:
    for line in infile:
        headers = {"Content-Type": "application/json"}
        data = {"fields": {
                "project": {"key": "TECH"},
                "parent": {"key": line.rstrip()},
                "summary": "Create AD List ",
                "description": "",
                "issuetype": {"name": "Sub-task"},
                "customfield_10107": {"id": "10400"}
                }}

        response = requests.post("https://jira.company.com/rest/api/latest/issue/",
                                 headers=headers,
                                 data=json.dumps(data),
                                 auth=("user", "pass"))
正如另一个答案所说,如果您使用
json
param而不是
data
param,dict将自动为您编码,并且内容类型设置为application/json


可以尝试使用
rstrip()
跳过任何尾随空格/换行符和
json.dumps()
,这样数据就不会以表单编码的形式传递

import requests
import json

with open("output.txt", "rb") as infile:
    for line in infile:
        headers = {"Content-Type": "application/json"}
        data = {"fields": {
                "project": {"key": "TECH"},
                "parent": {"key": line.rstrip()},
                "summary": "Create AD List ",
                "description": "",
                "issuetype": {"name": "Sub-task"},
                "customfield_10107": {"id": "10400"}
                }}

        response = requests.post("https://jira.company.com/rest/api/latest/issue/",
                                 headers=headers,
                                 data=json.dumps(data),
                                 auth=("user", "pass"))
正如另一个答案所说,如果您使用
json
param而不是
data
param,dict将自动为您编码,并且内容类型设置为application/json



不起作用,它打印行但不传递给卷发器“不起作用”是什么意思?而且,我看不出你在哪里使用cURL。您可能需要打印
data
的值以确保其正确性。我的意思是,没有创建子任务,它的CURL命令刚刚转换为与python一起工作,它打印TECH-1147(这是上述命令的参数)
数据
不应该打印
TECH-1147
,因为它包含一个JSON字符串……而且,我不确定你所说的“子任务”是什么意思。我假设
请求
是Python请求库,在这种情况下,
请求。post
只是一个普通的Python函数。它打印是因为我把
打印行
我刚刚更新了问题,它是bash conmm,并转换为在pythondoesn下工作不工作,它打印线条但不传递给卷发器“不工作”是什么意思?而且,我看不出你在哪里使用cURL。您可能需要打印
data
的值以确保其正确性。我的意思是,没有创建子任务,它的CURL命令刚刚转换为与python一起工作,它打印TECH-1147(这是上述命令的参数)
数据
不应该打印
TECH-1147
,因为它包含一个JSON字符串……而且,我不确定“子任务”是什么意思。我假设
请求
是Python请求库,在这种情况下,
requests.post
只是一个普通的Python函数。它打印是因为我把
print line
我刚刚更新了一个问题,它是bash conmm,在Python下转换为工作。您将行视为字符串的一部分,而不是变量好的,如何将其转换为变量?使用字符串格式是一种方法好的,我尝试了
data=“%s”%line
并将其放置为“key”:数据,但同样,当硬编码在字符串格式更新后工作时,您是否尝试打印
response.json()
(或
json.dumps(resp_json)
)以查看响应的外观?可能会显示错误。您将行视为字符串的一部分,而不是变量好的,如何将其转换为变量?使用字符串格式是一种方法好的,我尝试了
data=“%s”%line
,并将其设置为“key”:数据,但同样,当硬编码时,它在更新字符串格式后工作,您是否尝试过打印
response.json()
(或
json.dumps(resp_json)
)以查看响应的外观?也许它会显示一个错误。这是正确的答案,因为python不会从行中删除尾随的换行符。也就是说,该键的意思是
“TECH-X”
,而不是
“TECH-X\n”
。这是正确的答案,因为python不会从行中删除尾随的换行符。也就是说,该键的作用是
“TECH-X”
,而不是
“TECH-X\n”