Articles of 进程popen

抑制popen()的输出

有没有办法抑制输出popen()而不会失去Wait()。 testing1: FILE * stream = NULL; char buffer [120]; stream = popen ("ffmpeg -y -i test.amr -ar 16000 test.wav -v quiet", "r"); while (fgets (buffer, sizeof(buffer), stream)) { } pclose (stream); testing2: FILE * stream = NULL; char buffer [120]; stream = popen ("ffmpeg -y -i test.amr -ar 16000 test.wav -v quiet &> /dev/null", […]

将预编译的应用程序embedded到C中的另一个程序中

前言 这可能是一个xy问题 ,所以如果有更好的方法来解决这个问题的话,我会接受偏离原始问题的build议。 问题 我有一个相当大的程序,可以生成很多指标,统计数据等。我需要的一个重要计算是生成复杂math运算输出的能力。 唯一可以生成此输出的工具是第三方供应商提供的应用程序。 供应商很乐意为我的公司编写任何操作系统/ distory /架构的应用程序,但他们不能给我们的来源。 因此,我们的程序必须依靠作为同一项目的一部分被运送的预编译程序,并且通过popen()启动供应商程序。 由于安装错误和其他问题, popen()调用由于path问题,文件被移动等等,有时会失败。这些不是我们可以控制的事情,但是客户把它归咎于开发者。 题 有没有办法,使用一个简单的C + +在Linux程序,以某种方式embedded外部应用程序到我们自己的应用程序,以便它可以popen()在私人存储器映射编辑,使程序总是可用“主”应用程序? 理想情况下,我们只是将这个程序的源代码添加到我们自己的代码库中,然后解决问题,但这不是我们可用的。

Cron终止Python脚本?

我有一个“长”的Python脚本,大约需要45分钟的时间来运行。 我使用另一个(“调度程序”脚本)python脚本来运行这个长脚本。 当我使用terminal运行“调度程序”脚本时,一切正常(也就是说,“长”脚本运行没有任何问题)。 我有一些挣扎,但最终成功地添加了“调度程序”脚本,每分钟运行通过cron。 所以现在“运行”其他脚本,并确定工作。 问题是:每当一个脚本(由'scheduler''正在运行')有一行说: print "hello" 或任何“打印”语句,cron作业运行,但20-30秒后终止。 当我删除任何“打印”语句,cron正常运行的作业,并没有终止。 我想解决这种情况,即使他们有一些“打印”语句,脚本也会继续运行。 任何提示如何做到这一点? PS从“调度程序”内部使用 subprocess.Popen([sys.executable, command]) 来“运行”所有其他的Python脚本。

OSError:无法从python subprocess.call分配内存

我已经阅读了几个类似的post,但没有一个可以直接帮助我。 如果这实际上是一个重复的post,请直接到包含解决scheme的线程! 我保存了一堆图像,然后用subprocess.call在它们上调用ffmpeg。 我为了收集不同的图像做了这么多次。 这基本上是我在做什么: from subprocess import call for video in videos: call(['ffmpeg', …, '-i', video, video+'.mp4')]) 隔离这工作正常。 然而,当我在这些调用之前还做了一些其他的处理(不是在循环中,在循环开始之前只是在内存中保存值),在制作好几个video之后,会发生内存错误一)。 根据这个评论 ,subprocess调用/克隆当前进程,这似乎意味着它要求一个内存分配等于我目前在内存中有多less,这似乎是我想调用ffmpeg 。 我怎么能从Python内调用ffmpeg而不要求分配不必要的内存量?

像Python中的其他用户一样运行一个进程

我正在运行一个脚本作为userA的根访问,从这个脚本我想做一个popen()调用,并运行一个不同的进程作为userB 。 os.setuid()似乎并没有为此工作(除非我这样做是错误的?),我想避免一个基于Linux的解决scheme,如su -userB -c <command> 当脚本以userA身份运行时,是否有一种运行进程为python的Python?

Python的subprocesspopen死锁

我有一个问题,popen是僵局。 具体来说,运行popen的线程(不是主线程)被卡在: File: "/usr/lib/python2.7/subprocess.py", line 679, in __init__ errread, errwrite) File: "/usr/lib/python2.7/subprocess.py", line 1224, in _execute_child data = _eintr_retry_call(os.read, errpipe_read, 1048576) File: "/usr/lib/python2.7/subprocess.py", line 478, in _eintr_retry_call return func(*args) 用ps,我可以看到python进程已经分叉了,但是它还没有运行os.execvp。 这可以通过检查ps看到,在那里我看到我的主进程有一个同名的subprocess。 杀死该进程会导致父级中卡住的线程恢复。 据我所知,subprocess(这将execvp)locking在创build和运行os.execvp之间的50行中的某个地方。 使问题复杂化,这是非常罕见的。 可能有100个popen。 这个locking怎么会发生? 我如何解决它? (我不能在一个简单的python程序中重现这种行为)。 我应该注意到,虽然这个程序是令人难以置信的multithreading(数百个线程运行),没有其他线程分叉或使用popen。 虽然许多其他线程正在处理文件描述符(主要是套接字)。 技术说明: 在Amazon EC2上运行 在Ubuntu 11.10中的Linux 3.0.0-14-x86_64 python 2.7.2解释器。 使用包括paramiko和博托几个库

如何在Windows上使用Popen隐藏控制台?

我发现这个话题,我发现这是一个解决scheme: 模块subprocess没有属性“STARTF_USESHOWWINDOW” 但是当我运行的代码现实不同。 :/ 运行我的代码: # Get the environment variables from OO-Python using subprocess oo_py_exec = os.path.join(oo_dir, r'program\python.exe') python_oo_script = ' ;'.join([ "-cimport os", "print(os.environ['URE_BOOTSTRAP'])", "print(os.environ['UNO_PATH'])", "print(os.environ['PATH'])", ]) subprocess.STARTF_USESHOWWINDOW info = subprocess.STARTUPINFO() info.dwFlags = subprocess.STARTF_USESHOWWINDOW info.wShowWindow = subprocess.SW_HIDE process = subprocess.Popen([oo_py_exec, python_oo_script], stdout=subprocess.PIPE, startupinfo=info) result = process.communicate() 显示控制台。 从链接运行代码: kwargs = {} if subprocess.mswindows: su […]

调用多个_popen失败

我有一个问题_popen(const char *, const char *) 我试图用awk来从adb获取信息,但是我的程序在第二个_popen调用中崩溃(该方法被调用两次)。 这是有问题的代码( sysinf_getvalue()在主程序中被多次调用)。 难看的代码 int deviceadbinfowritten = 0; int devicebootloaderinfowritten = 0; int adbinit = 0; int initadb() { if(!adbinit) { system("adb kill-server && adb start-server"); adbinit = 1; } return 0; } int sysinfo_getadbinfofile() { if(!deviceadbinfowritten) { system("echo Please connect your device && adb wait-for-device && adb.exe shell […]

python – path打印输出

我有这个里面的py文件: from subprocess import Popen program = "path to program.exe" file = "path to file used by program.exe" p = Popen([program, file]) print p.stdout.read() 当我这样做的时候: C:\>python file.py 在cmd我得到了 #output #…. #… more output C:\:>#…more output #…. #…here finishes output 为什么出现“ C:\> ”? 是否因为Popen为了运行我给予的命令而需要创build一个新的进程? 提前致谢 PD:使用windows server 2008 python 2.7.5

Lua – popen 2x'&&'chained set / p – stdout需要休假

我在一个lua脚本运行的时候,在一个functionui几乎为零的环境中工作。 这对于我需要编写的脚本来说是不可接受的,而脚本在很大程度上依赖于用户input。 我发现绕过这一切的唯一方法是使用io.popen与一些相当狡猾的命令。 我意识到我在这里要做的事情是奇怪的,而且是非常错误的,而且我已经把自己带到了这里,但是我无法弄清楚这个代码片段中出现了什么问题: local a = 'f' local p = io.popen( 'echo -~`~-,_,- Editing '..(a == 'f' and 'foreground' or 'background')..' -~`~-,_,- > con && '.. –display text to the user 'set /pf= Find block: > con < con && '.. –user input 'call echo %f% &&' .. –pass f back to the lua […]