Fig*_*ire 43 python subprocess
我一直在尝试传递一个在shell中工作的命令,它只能在"concat:file1|file2"ffmpeg参数的命令行中使用文字双引号.
但我不能用python做这个工作subprocess.Popen().任何人都知道如何将引号传递给subprocess.Popen?
这是代码:
command = "ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy temp.mp4"
output,error = subprocess.Popen(command, universal_newlines=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)
当我这样做时,除了在concat segement周围的引号之外,ffmpeg不会采取任何其他方式.有没有办法成功将此行传递给subprocess.Popen命令?
Amb*_*ber 42
我建议使用调用的列表形式而不是引用的字符串版本:
command = ["ffmpeg", "-i", "concat:1.ts|2.ts", "-vcodec", "copy",
"-acodec", "copy", "temp.mp4"]
output,error = subprocess.Popen(
command, universal_newlines=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)
这更准确地表示将传递给最终过程的确切参数集,并且无需使用shell引用.
也就是说,如果你绝对想要使用普通字符串版本,只需使用不同的引号(和shell=True):
command = 'ffmpeg -i "concat:1.ts|2.ts" -vcodec copy -acodec copy temp.mp4'
output,error = subprocess.Popen(
command, universal_newlines=True, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()
Run Code Online (Sandbox Code Playgroud)
这适用于python 2.7.3管道stderr到stdout的命令自旧版本的python以来已经改变:
把它放在一个名为test.py的文件中:
#!/usr/bin/python
import subprocess
command = 'php -r "echo gethostname();"'
p = subprocess.Popen(command, universal_newlines=True, shell=True,
stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
text = p.stdout.read()
retcode = p.wait()
print text
Run Code Online (Sandbox Code Playgroud)
调用它:
python test.py
Run Code Online (Sandbox Code Playgroud)
它打印我的主机名,这是apollo:
apollo
Run Code Online (Sandbox Code Playgroud)
阅读子流程手册:http: //docs.python.org/2/library/subprocess.html
| 归档时间: |
|
| 查看次数: |
39874 次 |
| 最近记录: |