草庐IT

subprocesses

全部标签

python - 将 Ctrl-C 发送到通过 subprocess.Popen 和 ssh 启动的远程进程

如何向Popen()对象中的多个ssh-t进程发送Ctrl-C?我有一些Python代码可以启动远程主机上的脚本:#kickoff.py#icall'ssh'w/the'-t'flagsothatwhenipress'ctrl-c',itget's#senttothescriptontheremotehost.otherwise'ctrol-c'wouldjust#killthingsonthisend,andthescriptwouldstillberunningonthe#remoteservera=subprocess.Popen(['ssh','-t','remote-host

Python subprocess.call 函数不重定向输出

我正在尝试从一个python文件中运行一个名为nn.sh的shell脚本(它不断运行一个Linux命令)。我正在使用以下代码:fromsubprocessimportcall,Popen,PIPEcall(['/bin/sh','nn.sh','172.20.125.44','10','>>','log.txt'])此代码应该以输入172.20.125.44和10运行nn.sh并将结果存储在文件中日志.txt。当我运行这个Python脚本时,它只在屏幕上显示运行nn.sh的结果,并没有将它们保存在填充的log.txt中。但是,如果我输入/bin/shnn.sh172.20.125.44

Python:为什么 print 语句和 subprocess.call() 输出不同步?

我正在运行以下代码(称之为batch.py​​)forconfiginkeystoneConfig:cmdlist=generate_cmd_list(config)print''.join(cmdlist)subprocess.call(cmdlist)并将batch.py​​的输出重定向到另一个文件。即./batch.py>output.txt但我意识到subprocess.call()的所有输出都在print语句之前。为什么输出不同步? 最佳答案 Python在subprocess.call()之前block缓冲它自己的输出而

Python 3.4.3 subprocess.Popen 在没有管道的情况下获取命令输出?

我正在尝试将命令的输出分配给变量,而命令认为它正在被管道传输。这样做的原因是,所讨论的命令在通过管道传输时会提供未格式化的文本作为输出,但在从终端运行时会提供彩色格式化文本。我需要获取这种颜色格式的文本。到目前为止,我已经尝试了一些事情。我试过Popen是这样的:output=subprocess.Popen(command,stdout=subprocess.PIPE)output=output.communicate()[0]output=output.decode()print(output)这将让我打印输出,但它会给我在管道命令时获得的未格式化输出。这是有道理的,因为我在Pyt

python - 了解 python subprocess.check_output 的第一个参数和 shell=True

这个问题在这里已经有了答案:Actualmeaningof'shell=True'insubprocess(7个答案)关闭去年。我对如何正确使用Python的子进程模块感到困惑,特别是check_output方法的第一个参数和shell选项。查看下面交互式提示的输出。我将第一个参数作为列表传递,并且根据是否设置了shell=True,我得到了不同的输出。有人可以解释这是为什么以及输出的输出吗?>>>importsubprocess>>>subprocess.check_output(["echo","HelloWorld!"])'HelloWorld!\n'>>>subprocess.

python - 为什么 subprocess.Popen 参数长度限制小于操作系统报告的长度?

我在Linux3.16.0上运行Python3.4.3。我想使用subprocess.Popen运行一个带有长单个参数的命令(一个复杂的Bash调用),大约200KiB。根据getconf和xargs,这应该在我的限制范围内:$getconfARG_MAX2097152$xargs--show-limits然而,Python失败的限制非常小:>>>subprocess.Popen('echo%s>/dev/null'%('a'*(131072-4096)),shell=True,executable='/bin/bash')>>>subprocess.Popen('echo%s>/de

Python subprocess.Popen 错误,OSError : [Errno 12] Cannot allocate memory after period of time

注意:此问题已被重新提出,并提供了所有调试尝试的摘要here.我有一个Python脚本作为后台进程运行,每60秒执行一次。其中一部分是调用subprocess.Popen得到ps的输出.ps=subprocess.Popen(['ps','aux'],stdout=subprocess.PIPE).communicate()[0]运行几天后,调用出错:File"/home/admin/sd-agent/checks.py",line436,ingetProcessesFile"/usr/lib/python2.4/subprocess.py",line533,in__init__Fil

python - 如何将 "subprocess.call"的输出捕获到文件中?

在我的代码中,我有类似这样的一行:rval=subprocess.call(["mkdir",directoryName],shell=True)我可以检查rval看看是0还是1,但如果是1,我想将命令"Asubdirectoryorfilebenalreadyexists."中的文本保存为文件格式,因此如果我想确保文本是,我可以将其与另一个文件进行比较一样的。是否可以有这样的一行,但我知道这行不通rval=subprocess.call(["mkdir",directoryName],shell=True)>>filename所以无论命令发生什么,文本都被捕获在filename中,而

python - 如何从 subprocess.Popen.stdout 读取所有可用数据(非阻塞)?

我需要一种方法来读取Popen创建的流中所有当前可用的字符,或者找出缓冲区中剩余的字符数。背景:我想用Python远程控制一个交互式应用程序。到目前为止,我使用Popen创建了一个新的子进程:process=subprocess.Popen(["python"],shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,cwd=workingDir)(我不是真的开始python,但实际的交互界面是相似的。)目前我读取了1个字节,直到我检测到进程已到达命令提示符:output=""whil

python - subprocess.Popen() 错误(没有这样的文件或目录)调用带有参数作为字符串的命令

我正在尝试使用Python函数计算文件中的行数。在当前目录中,当os.system("ls")找到文件时,命令subprocess.Popen(["wc-lfilename"],stdout=subprocess.PIPE)不起作用。这是我的代码:>>>importos>>>importsubprocess>>>os.system("ls")sorted_list.dat0>>>p=subprocess.Popen(["wc-lsorted_list.dat"],stdout=subprocess.PIPE)File"",line1,inFile"/Users/a200/anacond