Articles of 子

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的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和博托几个库

如何在Python中使用subprocess模块来启动和停止Linux程序?

我正在编写一个使用Selenium来屏蔽另一个网站的Web应用程序。 这个屏幕截图每天只发生一次,所以我宁愿不要让Selenium和Xvfb一直在运行。 我试图找出如何从Python启动Xvfb和Selenium,然后在屏幕截图完成后停止它们。 如果我手动执行,我会在命令行启动它们,然后按CTRL C来停止它们。 我试图从Python做同样的事情。 我似乎能够像这样成功启动Xvfb: xvfb = Popen('Xvfb :99 -nolisten tcp', shell=True) 但是,当我试图终止它: xvfb.terminate() 然后尝试再次启动(通过重复我的初始命令),它告诉我它已经在运行。

检测subprocess何时等待input

我正在编写一个Python程序,用于在Linux服务器上运行用户上传的任意代码(最坏的情况下是不安全的,错误的和崩溃的)。 抛开安全性问题,我的目标是要确定,如果代码(可能是用任何语言编译或解释的)将正确的东西写入stdout , stderr和其他文件,并将其input到程序的stdin 。 之后,我需要将结果显示给用户。 目前的解决scheme 目前,我的解决scheme是使用subprocess.Popen(…)具有stdout , stderr和stdin文件句柄的subprocess。 stdin句柄后面的文件包含程序在操作期间读取的input,在程序结束后,会读取stdout和stderr文件并检查其是否正确。 问题 这种方法在其他方面是完美的,但是当我显示结果时,我不能将给定的input和输出组合起来,这样input将会出现在与从terminal运行程序时相同的地方。 就像一个程序 print "Hello." name = raw_input("Type your name: ") print "Nice to meet you, %s!" % (name) 包含程序stdout的文件的内容在运行后将是: Hello. Type your name: Nice to meet you, Anonymous! 因为包含stdin的文件的内容是Anonymous<LF> 。 所以,简而言之,对于给定的示例代码(以及等价地,对于任何其他代码),我想实现如下结果: Hello. Type your name: Anonymous Nice to meet you, Anonymous! 因此,问题是检测程序何时等待input。 试过的方法 […]

如何等待subprocess的开始?

我执行一个进程(使用Popen),过了一段时间,这个进程执行一个subprocess。 我想要做的是等待subprocess生成,然后继续执行我的脚本。 我发现的唯一方法是使用psutil和轮询,直到进程有孩子。 process = psutil.Process(subprocess.Popen(command).pid) while 0 == len(process.children()): time.sleep(0.2) 有没有更好的方式比对孩子进行投票? 也许等待一些事件? 我使用的是Windows 10。

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

删除2级子文件夹,但保留1级子文件夹

我的问题是,我们有一个networking共享与不同的子文件夹ACL权限等 我需要保持第一级,但也需要删除这些文件夹中的一切。 share:\Test1\Test11\… share:\Test1\Test12\… share:\Test2\Test21\… share:\Test2\Test22\… share:\Test3\Test31\… share:\Test3\Test32\… share:\Test… 结果可能是: share:\Test1\ share:\Test2\ share:\Test3\ share:\Test… 我发现一个根文件夹的解决scheme,但我有多个不同的名称,不是所有的testxxx。 任何帮助表示赞赏。 谢谢。

Windows python脚本运行服务器并继续

我正在处理我的python脚本来启动一个服务器,可能会在后台或不同的进程中,然后在杀死启动的服务器之前再做一些处理。 一旦剩余的处理结束,然后杀死启动的服务器。 例如 server_cmd = 'launch_server.exe -source '+ inputfile print server_cmd cmd_pid = subprocess.Popen(server_cmd).pid … … … #Continue doing some processing cmd_pid.terminate() # Once the processing is done, terminate the server 一些如何启动服务器后,脚本不会继续作为服务器可能正在无限循环运行侦听请求。 有没有一种很好的方式发送这个过程在后台,所以它不希望命令行input。 我正在使用Python 2.7.8

在Windows中从subprocess中检索stdout

我可以调用FFmpeg与subprocess.Popen并检索我需要的数据,因为它发生(取得进展),但只在控制台。 我环顾四周,发现用pythonw运行时无法获取数据。 然而,等到整个过程完成检索数据是没有意义的,因为我试图包装一个PyQT的graphics用户界面周围FFmpeg,所以我可以有漂亮的进度条和什么。 所以问题是,当你使用pythonw的时候,你可以从一个subprocess中调用“实时”数据吗? 我还没有尝试简单地使用py2exe编译应用程序,但作为一个Windows应用程序,会解决这个问题吗?