我正在尝试在子进程中运行长的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
查看语法突出显示。您看到发送到的字符串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或编辑器中,您将看到它已被识别并显示为单个字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句