我正在通过Python的子进程模块运行脚本。目前我使用:p=subprocess.Popen('/path/to/script',stdout=subprocess.PIPE,stderr=subprocess.PIPE)result=p.communicate()然后我将结果打印到标准输出。这一切都很好,但由于脚本需要很长时间才能完成,我也希望从脚本实时输出到标准输出。我通过管道输出的原因是因为我想解析它。 最佳答案 将子进程的标准输出保存到变量以供进一步处理,并保存到displayitwhilethechildprocessis
我需要运行一个程序并将其输出收集到标准输出。该程序(socat)需要在python脚本运行期间在后台运行。Socat在运行后会处于dameon模式,但首先它会向stdout输出一些我需要用于我的脚本其余部分的行。命令:socat-d-dPTY:PTY:输出:2011/03/2321:12:35socat[7476]NPTYis/dev/pts/12011/03/2321:12:35socat[7476]NPTYis/dev/pts/22011/03/2321:12:35socat[7476]NstartingdatatransferloopwithFDs[3,3]and[5,5]...
我正在编写一些代码,这些代码将通过SSHDDblock设备,我想用子进程执行此操作,以便我可以在传输期间监视DD的状态(使用SIGUSR1杀死dd进程以获得它的当前状态,并使用选择读取它)。我要执行的命令是这样的:ddif=/dev/sda|sshroot@example.com'ddof=/dev/sda'我目前尝试的方法是:dd_process=subprocess.Popen(['dd','if=/dev/sda'],0,None,None,subprocess.PIPE,subprocess.PIPE)ssh_process=subprocess.Popen(['ssh','r
我只需要有关如何正确做事的提示。假设我有一个名为script.py的脚本,它使用名称列表作为参数["name1"、"name2"等]。我想使用subprocess模块从另一个脚本调用这个脚本。所以我想做的是:myList=["name1","name2","name3"]subprocess.Popen(["python","script.py",myList])当然这不起作用,因为subprocess.Popen方法需要一个字符串列表作为参数。所以我考虑执行以下操作:subprocess.Popen(["python","script.py",str(myList)])现在进程开始了
这是一个简单的脚本运行子进程,它从终端的ifconfig命令输出中检索IP。我注意到subprocess.check_output()总是返回一个带有\n的值。我希望在没有\n的情况下获得返回值。如何做到这一点?$python>>>importsubprocess>>>subprocess.check_output("ifconfigen0|awk'{print$2}'|grep-E-o'([0-9]{1,3}[\.]){3}[0-9]{1,3}'",shell=True)'129.194.246.245\n' 最佳答案 对于通用方
我想在子进程上使用超时fromsubprocess32importcheck_outputoutput=check_output("sleep30",shell=True,timeout=1)不幸的是,虽然这会引发超时错误,但它会在30秒后发生。check_output好像不能打断shell命令。我可以在Python方面做些什么来阻止这种情况?我怀疑subprocess32未能终止超时进程。 最佳答案 check_output()withtimeoutisessentially:withPopen(*popenargs,stdout
当我使用pythonw.exe在Windows上运行以下脚本时,我希望能够获取stdout和stderr的内容:importsubprocessimportsysimportosimportstringimporttimetmpdir='c:/temp'cmd='dirc:'tmpfile="tmp_%f"%(time.time())tmpfile=os.path.normpath(os.path.join(tmpdir,tmpfile))tmpfile2=tmpfile+".bat"tmpfile3=tmpfile+".txt"fa=open(tmpfile2,'w')fa.writ
我有一个关于popen(以及所有相关函数)的一般性问题,适用于所有操作系统,当我编写python脚本或一些c代码并从控制台(win或linux)运行生成的可执行文件时,我可以立即查看过程的输出。但是,如果我运行与fork进程相同的可执行文件,并将其标准输出重定向到管道中,则输出会在某处缓冲,通常最多4096字节,然后写入父进程可以读取的管道。以下python脚本将以1024字节的block生成输出importos,sys,timeif__name__=="__main__":dye='@'*1024foriinrange(0,8):printdyetime.sleep(1)下面的pyt
我正在尝试编写一个python程序来测试用C编写的服务器。python程序使用subprocess模块启动已编译的服务器:pid=subprocess.Popen(args.server_file_path).pid这工作正常,但是如果python程序由于错误而意外终止,生成的进程将继续运行。我需要一种方法来确保如果python程序意外退出,服务器进程也会被终止。更多细节:仅限Linux或OSX操作系统服务器代码不能以任何方式修改 最佳答案 我会atexit.register终止进程的函数:importatexitprocess=s
首先,很抱歉,我确信我对bash、shell和子进程的初步理解是显而易见的。我正在尝试使用Python自动调用一个名为Freesurfer的程序(实际上,我正在调用的子程序称为recon-all。)如果我直接在命令行执行此操作,我会“获取”一个名为mySetUpFreeSurfer.sh的脚本,该脚本除了设置三个环境变量外什么都不做,然后“获取”另一个脚本FreeSurferEnv.sh。FreesurferEnv.sh在我看来除了设置很多环境变量并向终端回显一些内容外什么也没做,但它比其他bash脚本更复杂,所以我不确定。这是我现在拥有的:fromsubprocessimportPo