Python 子进程语法无效

Python subprocess invalid syntax

我正在尝试 运行 子进程中的长 bash 命令,但出现语法错误。目标是在命令末尾添加文件名。

ok="file.csv"

p = subprocess.Popen("awk -F'"?,"?' '{ split(, 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(, a, / /); if (a[2] == "KB") a[1] /= 1000; sum += a[1] } END { print sum }' file.csv
1346.94

查看语法突出显示。您是否看到发送到 Popen() 的字符串不是单个字符串?有一个字符串,然后是 ?,,然后是一个字符串,然后是 KB,然后是一个字符串。尝试使用 triple-quoted 字符串:

ok="file.csv"

p = subprocess.Popen("""awk -F'"?,"?' '{ split(, 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

请注意,此答案代码中突出显示的语法使其看起来仍然有问题,但这是它处理 triple-quoted 字符串的方式的问题。将它放入 IDE 或像 Notepad++ 这样的编辑器中,你会看到它被识别并显示为单个字符串。