当前位置: 首页 > 知识库问答 >
问题:

在Python中关闭wget子进程时出错

郏兴贤
2023-03-14

我正在使用Python中的wget下载一个文件,代码如下:

p1 = subprocess.Popen(['wget',
                       '-P', 
                       'path/to/folder','http://www.ncbi.nlm.nih.gov/Traces/wgs/?download=ACHI01.1.fsa_nt.gz'],
                       stdout=subprocess.PIPE)

p1.studout.close()

该文件已下载并正确保存在给定文件夹中,但进程仍在运行。我尝试了p1。kills()但这也不起作用。请告知。

谢谢

共有2个答案

夹谷阳夏
2023-03-14

在Popen之后缺少对etc()的调用,以使主进程等待直到子进程终止。下面的代码似乎工作正常:

import subprocess as sp

def main(args):
p1 = sp.Popen(['wget', '-P path',
               'http://www.ncbi.nlm.nih.gov/Traces/wgs/?download=ACHI01.1.fsa_nt.gz'],
               stdout = sp.PIPE)
p1.wait()
return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

(如果命令行参数有任何值,您也可以将它们分组)。

阳英朗
2023-03-14

用subprocess.call

import subprocess 

subprocess.call (['wget', '-P', '/', 'http://www.ncbi.nlm.nih.gov/Traces/wgs/?download=ACHI01.1.fsa_nt.gz'])
 类似资料:
  • 问题内容: 我目前正在使用 我对Python相当陌生,但是它“感觉”到应该有一些api可以让我做类似的事情: 我这样做是为了在知道cmd已经退出的情况下可以执行某些操作(例如,对当前正在运行的外部进程数进行计数) 我以为我可以将子流程包装在将线程与方法结合在一起的类中,但是由于我还没有在Python中完成线程,而且对于API来说这似乎很常见,我想我会尝试先找到一个。 提前致谢 :) 问题答案: 您

  • 问题内容: 有没有办法确保所有创建的子进程在Python程序退出时都消失了?所谓子流程,是指那些用subprocess.Popen()创建的内容。 如果不是,我是否应该遍历所有发出的终止点,然后终止-9?有什么清洁剂吗? 问题答案: 您可以为此使用 atexit ,并注册程序退出时要运行的所有清理任务。 atexit.register(func [,* args [, kargs]])** 在清理

  • 问题内容: 是否有任何参数或选项可为Python的subprocess.Popen方法设置超时? 像这样: ? 问题答案: 我会建议采取看看类中的模块。我用它来实现超时。 首先,创建一个回调: 然后打开过程: 然后创建一个计时器,该计时器将调用回调,并将过程传递给它。 在程序后面的某个位置,您可能需要添加以下行: 否则,python程序将继续运行,直到计时器运行完毕。 编辑:我被告知, 在和条件之

  • 问题内容: 为了从我的Python脚本启动程序,我使用以下方法: 因此,当我启动像这样的过程时我的程序将等待直到该过程完成为止,然后我才能获得程序的完整输出。如果我正在运行需要一段时间才能完成的过程,这将很烦人。 我可以让我的程序通过在循环完成之前轮询过程输出来逐行写过程输出吗? 问题答案: 你可以在命令输出行之后立即使用处理行。这是显示典型用例的完整示例:

  • 我正在创建一个TCP服务,该服务在每次客户端连接时分叉一个新进程。在分叉之前,我设置了一个管道,以便子级可以将连接期间收集的统计信息发送回父级。父项关闭写入端,子项关闭读取端,父项维护读取端文件描述符数组,每个子项一个。 我不确定当孩子完成连接并退出时如何处理这些文件描述符。子级是否需要通过管道通知父级即将退出,以便父级可以关闭管道?或者,父级能否在子级退出并关闭后自动检测到管路损坏? 父程序中的

  • 请想象一些子进程是由pcntl_fork()生成的,它们分别使用PDO打开mysql连接。如果父进程向子进程发送带有posix_kill()的SIGTERM信号,子进程将立即被杀死。 所以,我对此有一个疑问。当子进程终止时,它是否也会自动关闭mysql连接?或者我应该调用out()函数? 我知道如果发送了SIGKILL,子进程会保持连接。但是,我不知道SIGTERM的情况。