Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用exec和返回结果从golang内联python3_Python_Bash_Go - Fatal编程技术网

使用exec和返回结果从golang内联python3

使用exec和返回结果从golang内联python3,python,bash,go,Python,Bash,Go,我一直在跟踪从golang调用python并捕获go代码的返回,以解码一个简单的csv并转换为json 此命令在cli中作为命令工作: $ python3.7 -c "exec(\"import csv,json \na=list() \nfor i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i)) \nb=dict(enumerate(a)) \nc=json.

我一直在跟踪从golang调用python并捕获go代码的返回,以解码一个简单的csv并转换为json

此命令在cli中作为命令工作:

$ python3.7 -c "exec(\"import csv,json  \na=list() \nfor i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i))   \nb=dict(enumerate(a))   \nc=json.dumps(b, sort_keys=True, indent=4)   \nprint(c)\")"
从Golang,命令集如下所示:

cmd := exec.Command("python", "-c", "import csv,json; a=list(); for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i)); b=dict(enumerate(a)); c=json.dumps(b, sort_keys=True, indent=4); print(c)")
但是,我得到了以下错误:

exit status 1
  File "<string>", line 1
    import csv,json; a=list(); for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): a.append(json.dumps(i)); b=dict(enumerate(a)); c=json.dumps(b, sort_keys=True, indent=4); print(c)
                                                                                                                                                ^
SyntaxError: invalid syntax

尝试使用换行符传递参数,并使用原始字符串文字更正缩进:

cmd := exec.Command("python", "-c", `import csv,json; 
a=list(); 
for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')): 
   a.append(json.dumps(i)); 
   b=dict(enumerate(a)); 
   c=json.dumps(b, sort_keys=True, indent=4); 
   print(c)
`)


如果运行
python-
。它将从
stdin
读取程序。这对于来自不同来源的任意长的python脚本非常有用

python_source = `import csv,json 
a=list()
for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')):
    a.append(json.dumps(i))
b=dict(enumerate(a))
c=json.dumps(b, sort_keys=True, indent=4)
print(c)`

 cmd := exec.Command("python", "-")
 cmd.Stdin = strings.NewReader(python_source)
 ...

我可以问一下,为什么要调用外部python进程而不是直接在go中解析它吗?@DemianBrecht谢谢你的提问。这是为了避免为我正在处理的csv定义一个庞大的结构。我对struct没有任何问题,只要它们很小并且易于管理,但是这个3行python在解码方面做得很好。
python_source = `import csv,json 
a=list()
for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')):
    a.append(json.dumps(i))
b=dict(enumerate(a))
c=json.dumps(b, sort_keys=True, indent=4)
print(c)`

 cmd := exec.Command("python", "-")
 cmd.Stdin = strings.NewReader(python_source)
 ...