【发布时间】:2017-12-20 10:36:18
【问题描述】:
我使用以下命令重新格式化文件并创建一个新文件:
sed -e '1s/^/[/' -e 's/$/,/' -e '$s/,$/]/' toto> toto.json
它在命令行上运行良好。
我尝试通过 python 脚本使用它,但它不会创建新文件。
我试试:
subprocess.call(["sed", "-e","1s/^/[/","-e", "s/$/,/","-e","$s/,$/]/ ",sys.argv[1], " > ",sys.argv[2]])
问题是:它在标准输出中给了我输出并引发错误:
sed: can't read >: No such file or directory
Traceback (most recent call last):
File "test.py", line 14, in <module>
subprocess.call(["sed", "-e","1s/^/[/","-e", "s/$/,/","-e","$s/,$/]/",
sys.argv[1], ">",sys.argv[2])
File "C:\Users\Anaconda3\lib\subprocess.py", line 291, in
check_call raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['sed', '-e', '1s/^/[/', '-e',
's/$/,/', '-e', '$s/,$/]/', 'toto.txt, '>', 'toto.json']' returned non-zero
exit status 2.
我阅读了子进程的其他问题并尝试使用选项 shell=True 的其他命令,但它也不起作用。 我使用 python 3.6
有关信息,该命令在第一行和最后一行添加一个括号,并在除最后一行之外的每一行的末尾添加一个逗号。所以,它确实:
from
a
b
c
到:
[a,
b,
c]
【问题讨论】:
-
不要在传递给
subprocess.call()(即" > ")的参数中添加空格,subprocess模块会为您执行此操作。此外,根据sed处理STDOUT 转发的方式,您可能需要添加shell=True以通过您的shell 调用命令。
标签: python subprocess