如果我用subprocess.PopenPython 调用进程如下:
myproc = subprocess.Popen(...).communicate()
查看其状态的正确方法是什么?不是它输出到stdout或stderr,而是它的退出状态一旦完成(例如0表示成功或另一表示失败)?
我创建了一个简单的方法,可以像在终端中一样执行命令
from subprocess import PIPE, run
class Command_Line():
@staticmethod
def execute(command):
result = run(command, stdout=PIPE, stderr=PIPE, universal_newlines=True, shell=True)
print(result)
return result.stdout
Run Code Online (Sandbox Code Playgroud)
我对上面代码的问题是它不会等到任务/进程完成。假设我使用 ffmpeg 通过以下代码更改视频的帧速率
import Command_Line as cmd
cmd.execute('ffmpeg -i "000000004.avi" -c copy -y -r 30 "000000004.avi"')
Run Code Online (Sandbox Code Playgroud)
问题是输出视频,因为它没有完成这个过程。我已经搜索了如何等待有没有办法检查子进程是否仍在运行? 但无法将其与我的代码合并。你能分享一下你的经验吗?
谢谢
我目前正在用 JAVA 构建一个应用程序,其中只能执行一次。所以我目前正在使用一个锁定文件,我在其中写入当前执行的 PID。
因此,每当此应用程序启动时,它都会打开文件(如果存在)并尝试检测写入文件的 PID 是否实际正在运行。
这可以防止我的应用程序在解锁文件之前崩溃的问题。
我需要它在 Windows(XP、7 或 8)和 linux(所有用户都在基于 debian 的发行版上)上工作。
这是一些代码,可以让您更好地了解我想要做的事情:
//get the PID from the file
int pidValue = new FileReader(file).read();
//get the OS type
String os = System.getProperty("os.name").toLowerCase();
//Check PID depending of OS type
if( os.contains("nux") || os.contains("nix") ){
/*
* Check PID on Linux/Unix
*/
} else if ( os.contains("win") ) {
/*
* Check PID on Windows
*/
}
Run Code Online (Sandbox Code Playgroud)
我试图找到关于这个主题的文档,但我还没有找到任何有用的东西。
非常感谢。