我有以下代码的问题:
callBash.py:
import subprocess
print "start"
subprocess.call("sleep.sh")
print "end"
Run Code Online (Sandbox Code Playgroud)
sleep.sh:
sleep 10
Run Code Online (Sandbox Code Playgroud)
我希望在10秒后打印"结束".(我知道这是一个愚蠢的例子,我可以简单地在python中睡觉,但这个简单的sleep.sh文件只是作为测试)
我正在使用Python subprocess.communicate()来从一个运行大约一分钟的进程中读取stdout.
如何stdout以流式方式打印出该流程的每一行,以便我可以看到生成的输出,但在继续之前仍然阻止流程终止?
subprocess.communicate() 似乎立刻提供所有输出.
我想使用jar命令行实用程序将我的一个jar提取到指定的目录.
如果我理解这个正确的-C选项应该诀窍但是当我尝试
jar xvf myJar.jar -C ./directoryToExtractTo
Run Code Online (Sandbox Code Playgroud)
我从我的jar实用程序获取使用信息,所以我做错了.
是我想要实现的东西,jar或者我需要手动移动我的罐子并在那里调用
jar xvf myJar.jar
Run Code Online (Sandbox Code Playgroud) 我找到了有关subprocess.check_output()的文档,但我找不到带参数的文档,文档也不是很深入.我正在使用Python 3(但我试图通过Python 3运行Python 2文件)
我正在尝试运行此命令:
python py2.py -i test.txt
-i是argparse的位置参数,test.txt是-i是什么,py2.py是要运行的文件
我尝试了很多(非工作)变体,包括:
py2output = subprocess.check_output([str('python py2.py '),'-i', 'test.txt'])
py2output = subprocess.check_output([str('python'),'py2.py','-i', test.txt'])
import os
import subprocess
proc = subprocess.Popen(['ls','*.bc'], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out,err = proc.communicate()
print out
Run Code Online (Sandbox Code Playgroud)
此脚本应打印带有.bc后缀的所有文件,但它会返回一个空列表.如果我在命令行中手动执行ls*.bc它可以工作.在脚本中执行['ls','test.bc']也可以,但由于某些原因,星形符号不起作用..任何想法?
我一直在尝试传递一个在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命令?
我想运行Linux字数统计实用程序wc来确定当前在/ var/log/syslog中的行数,因此我可以检测到它正在增长.我尝试了各种测试,当我从wc获得结果时,它既包括行数也包括命令(例如,var/log/syslog).
所以它返回:1338/var/log/syslog但我只想要行数,所以我想剥离/ var/log/syslog部分,并保持1338.
我已经尝试将它从bytestring转换为字符串,然后剥离结果,但没有快乐.转换为字符串和剥离,解码等的相同故事 - 都无法产生我正在寻找的输出.
这些是我得到的一些例子,在syslog中有1338行:
这是我编写的一些测试代码,试图破解这个问题,但没有解决方案:
import subprocess
#check_output returns byte string
stdoutdata = subprocess.check_output("wc --lines /var/log/syslog", shell=True)
print("2A stdoutdata: " + str(stdoutdata))
stdoutdata = stdoutdata.decode("utf-8")
print("2B stdoutdata: " + str(stdoutdata))
stdoutdata=stdoutdata.strip()
print("2C stdoutdata: " + str(stdoutdata))
Run Code Online (Sandbox Code Playgroud)
这个输出是:
2A stdoutdata:b'1338/var/log/syslog \n'
2B stdoutdata:1338/var/log/syslog
2C stdoutdata:1338/var/log/syslog
2D stdoutdata:1338/var/log/syslog
我需要date | grep -o -w '"+tz+"'' | wc -w在我的localhost上使用Python 运行命令 .我正在使用subprocess相同的模块,并使用check_output我需要捕获输出相同的方法.
但是它给我一个错误:
Traceback (most recent call last):
File "test.py", line 47, in <module>
check_timezone()
File "test.py", line 40, in check_timezone
count = subprocess.check_output(command)
File "/usr/lib/python2.7/subprocess.py", line 537, in check_output
process = Popen(stdout=PIPE, *popenargs, **kwargs)
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
raise child_exception-
OSError: [Errno 2] No such file or directory
Run Code Online (Sandbox Code Playgroud)
请帮助我哪里出错了.我是python的新手
我有一个python子进程,我正在尝试从中读取输出和错误流.目前我有它的工作,但我只能在读完stderr之后阅读stdout.这是它的样子:
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout_iterator = iter(process.stdout.readline, b"")
stderr_iterator = iter(process.stderr.readline, b"")
for line in stdout_iterator:
# Do stuff with line
print line
for line in stderr_iterator:
# Do stuff with line
print line
Run Code Online (Sandbox Code Playgroud)
如您所见,stderrfor循环在stdout循环完成之前无法启动.如何修改它以便能够以正确的顺序读取这两行?
澄清:我仍然需要能够判断一条线是否来自stdout或者stderr因为我的代码中它们的处理方式不同.
我曾经能够做一个subprocess.call(["command","-option value -option value"]) ,它会工作有一个更改命令,以正确使用引号中的东西,但现在我必须更改我的子进程调用命令看起来像这样:
subprocess.call(["command","-option","value","-option","value"])
Run Code Online (Sandbox Code Playgroud)
有什么我可以做的,让它在python中再次工作?
这些os.system("command -option value -option value") 作品和以前一样.
python ×9
subprocess ×6
python-3.x ×2
bash ×1
bytestring ×1
call ×1
command ×1
jar ×1
java ×1
pipe ×1
python-2.x ×1
shell ×1
stderr ×1
stdout ×1
wildcard ×1