Python子流程无效语法

用户名

我正在尝试在子进程中运行长的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
虎鹰T3

查看语法突出显示。您看到发送到的字符串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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章