相关疑难解决方法(0)

从python中运行bash脚本

我有以下代码的问题:

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 bash call

85
推荐指数
6
解决办法
18万
查看次数

从subprocess.communicate()读取流输入

我正在使用Python subprocess.communicate()来从一个运行大约一分钟的进程中读取stdout.

如何stdout以流式方式打印出该流程的每一行,以便我可以看到生成的输出,但在继续之前仍然阻止流程终止?

subprocess.communicate() 似乎立刻提供所有输出.

python subprocess

75
推荐指数
3
解决办法
7万
查看次数

将jar提取到指定目录

我想使用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)

java command jar

66
推荐指数
5
解决办法
10万
查看次数

你如何在Python中使用subprocess.check_output()?

我找到了有关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'])

python python-2.x python-3.x

60
推荐指数
3
解决办法
16万
查看次数

Python子进程通配符用法

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']也可以,但由于某些原因,星形符号不起作用..任何想法?

python subprocess wildcard

58
推荐指数
2
解决办法
3万
查看次数

将python中的双引号shell命令传递给subprocess.Popen()?

我一直在尝试传递一个在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命令?

python subprocess

43
推荐指数
3
解决办法
4万
查看次数

Python3子进程输出

我想运行Linux字数统计实用程序wc来确定当前在/ var/log/syslog中的行数,因此我可以检测到它正在增长.我尝试了各种测试,当我从wc获得结果时,它既包括行数也包括命令(例如,var/log/syslog).

所以它返回:1338/var/log/syslog但我只想要行数,所以我想剥离/ var/log/syslog部分,并保持1338.

我已经尝试将它从bytestring转换为字符串,然后剥离结果,但没有快乐.转换为字符串和剥离,解码等的相同故事 - 都无法产生我正在寻找的输出.

这些是我得到的一些例子,在syslog中有1338行:

  • b'1338/var/log/syslog \n'
  • 1338/var/log/syslog

这是我编写的一些测试代码,试图破解这个问题,但没有解决方案:

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

python subprocess bytestring python-3.x

39
推荐指数
3
解决办法
5万
查看次数

启动包含管道命令的子进程时发现文件未找到错误

我需要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 shell subprocess pipe

36
推荐指数
3
解决办法
4万
查看次数

Python在保留顺序的同时分别从子进程stdout和stderr读取

我有一个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因为我的代码中它们的处理方式不同.

python subprocess stdout stderr

29
推荐指数
5
解决办法
2万
查看次数

subprocess.call要求所有参数用逗号分隔

我曾经能够做一个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

18
推荐指数
2
解决办法
2万
查看次数

标签 统计

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