为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
慕田峪9158850 2023-08-14 17:48:18
我一直在遵循这个从 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我想我需要将缩进移回与 for 循环平行的位置,但是字符串化命令怎么可能做到这一点呢?提前致谢。更新:下面是等效的 python 工作,分配c变量的行需要沿着for loopa = list()for i in csv.DictReader(open('/Users/Astra/data_in/Data.csv', 'r')):    a.append(json.dumps(i))c = json.dumps(dict(enumerate(a)), sort_keys=True, indent=4)print(c)
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

如果你跑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)

 ...


查看完整回答
反对 回复 2023-08-14
?
弑天下

TA贡献1818条经验 获得超8个赞

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


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)

`)


查看完整回答
反对 回复 2023-08-14
  • 2 回答
  • 0 关注
  • 221 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号