首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python子处理无效语法

Python子处理无效语法
EN

Stack Overflow用户
提问于 2016-01-01 14:27:52
回答 1查看 1.7K关注 0票数 2

我试图在子进程中运行一个长bash命令,但这会导致语法错误。目标是在命令末尾添加文件名。

代码语言:javascript
运行
复制
ok="file.csv"

p = subprocess.Popen("awk -F'"?,"?' '{ split($2, a, / /); if (a[2] == "KB") a[1] /= 1000; sum += a[1] } END { print sum }' %s " %(ok),stdout=subprocess.PIPE, shell=True)
(sum,err) = p.communicate()

print sum

这就是我如何在命令行中运行代码(这是工作的):

代码语言:javascript
运行
复制
student@student-vm:~/Downloads$ awk -F'"?,"?' '{ split($2, a, / /); if (a[2] == "KB") a[1] /= 1000; sum += a[1] } END { print sum }' file.csv
1346.94
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-01 14:38:57

查看语法高亮显示。您知道您要发送给Popen()的字符串为什么不是单个字符串吗?有一个字符串,然后是?,,然后是一个字符串,然后是KB,然后是一个字符串。尝试使用三引号字符串:

代码语言:javascript
运行
复制
ok="file.csv"

p = subprocess.Popen("""awk -F'"?,"?' '{ split($2, a, / /); if (a[2] == "KB") a[1] /= 1000; sum += a[1] } END { print sum }' %s """ %(ok),stdout=subprocess.PIPE, shell=True)
(sum,err) = p.communicate()

print sum

请注意,这个答案的代码中的语法突出显示使它看起来好像还坏了,但这是一个如何处理三重引号字符串的问题。将其放入像Notepad++这样的IDE或编辑器中,您将看到它被识别并显示为单个字符串。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34556974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档