我试图在子进程中运行一个长bash命令,但这会导致语法错误。目标是在命令末尾添加文件名。
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这就是我如何在命令行中运行代码(这是工作的):
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发布于 2016-01-01 14:38:57
查看语法高亮显示。您知道您要发送给Popen()的字符串为什么不是单个字符串吗?有一个字符串,然后是?,,然后是一个字符串,然后是KB,然后是一个字符串。尝试使用三引号字符串:
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或编辑器中,您将看到它被识别并显示为单个字符串。
https://stackoverflow.com/questions/34556974
复制相似问题