如何运行可执行文件,然后在停止后继续执行?

时间:2019-12-29 23:11:12

标签: python

我想要做的是将我正在运行的可执行文件编写的文件保存到Dropbox文件夹中。这些文件是随机保存的,所以我不能使用计时器。

我知道执行文件的唯一方法是无阻塞的,并且当我运行函数时,它们只是执行并继续(例如,使用subprocess来运行start命令,参数是可执行文件)。

我无法修改可执行文件,只能运行它。

这是到目前为止我尝试过的事情:我已经查找了问题,却没有发现任何问题。我知道使用python执行某些操作的唯一方法是使用suprocess的call函数和Popen函数,并使用start命令执行可执行文件。但这仍然是非阻塞的,并且在可执行文件开始执行而不是结束执行之后继续进行。

4 个答案:

答案 0 :(得分:0)

我认为您想要以下内容;

# using module subprocess to pass arguments to and from an
# external program:
import subprocess
# put in the corresponding strings for
# "mycmd" --> external program name
# "myarg" --> arg for external program
# several args can be in the list ["mycmd", "myarg1", "myarg2"]
# might need to change bufsize
p = subprocess.Popen(["mycmd", "myarg"], bufsize=2048, shell=True,
    stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
# allow external program to work
p.wait()
# read the result to a string
result_str = p.stdout.read()

答案 1 :(得分:0)

在这里,我只是回答问题的标题。我不了解详细说明。

subprocess.call()被阻止。

但是,在Windows下使用start仅在启动程序所需的时间内阻止,而不会等待程序完成(如start的文档中所述)

您可能会看start /wait(例如CALL command vs. START with /WAIT option中提到的内容)

答案 2 :(得分:0)

子进程完成对文件的写入后,需要以某种方式进行通信,以便您的父进程可以开始读取文件。

如果子进程在完成文件写入后终止,则可以wait()进行阻塞,直到子进程完成。在较简单的情况下,可以使用.run()方法。在更复杂的情况下,如果要同时等待多个进程,则可能需要使用select()系统调用。

如果子进程没有终止,则需要以其他方式检测完成的写入。您可以通过解析指示完成的关键字的命令的标准输出/错误来做到这一点,或者可以在预期的文件位置轮询文件系统并查看目录,直到出现新文件或尚未将其写入。 x秒。

答案 3 :(得分:0)

我已经采用了这种方法,这并不是我想要的,但是它会做到:

import subprocess
import time

load_files()
subprocess.run(['executable.exe'])
time.sleep(5)

while b'executable.exe' in subprocess.check_output('tasklist'):
    time.sleep(1)

save_files()