Celery tasks.py只执行Django

时间:2017-03-03 04:52:31

标签: python django python-2.7 subprocess celery

我的Django应用程序的目标是作为两个Python程序的GUI。因此,除了登录页面,我还有一个表单,在提交后,将调用tasks.py。

我的tasks.py做什么(概述):

  1. 表单中的选项或选项将替换为通过if-else条件传递给第一个程序的参数。

  2. 然后这些args将被传递给第一个程序。

  3. 之后,它将转到第二个程序。

  4. 此程序需要打开Virtualbox,因为它是沙盒应用程序。此外,它包含两个subprocess.popen(),因为它将运行沙箱应用程序然后运行提交脚本。

  5. 我还将在分析之前根据其类型添加带有输入的args。由于沙盒应用程序不会自行终止并且只是在Ctrl + C之后停止,所以我在读取stdout和stderr之后使用subprocess.kill(),如果它包含表示已成功处理的字符串。

  6. 最后,我将发送一个子进程来关闭Virtualbox。

  7. 到目前为止,这是关于我的代码的想法:

    @shared_task(name='tasks.process_sample_input')
    def process_sample_input(instance_id):
    try:
        vm_open = subprocess.Popen(["VBoxManage", "startvm", "WindowsXP", "--type", "headless"])
        args = list()
        args = fill_args(instance_id) #this contains the if conditions for the additional arguments
        #some codes here for the thug_logs as log files
        first_process = subprocess.call((args), stdout=thug_logs, stderr = thug_logs)
        if first_process == 0:
           second_program(instance_id) 
           #this contains the subprocess.Popen for the 2nd program, also contains the subprocess.kill() for its subprocesses
        if vm_open is None: #If vm_open is still running
            subprocess.call(["vboxmanage", "controlvm", "CSG_Win", "poweroff"]) #turn it off
            vm_open.kill() #kill the popen command
    except:
        logger.error("Problem in Celery tasks")
    return None
    

    我的问题和疑问:

    1. 我的任务只是运行Virtualbox的开放,它不处理第一个程序中的输入。第一个程序的数据库没有变化,因此没有收到输入。 (主要问题,实际上没有进入第二个子流程)

    2. 我刚刚选择了使用subprocess.call和subprocess.popen的部分。对于那些可能不会自动关闭的部分,我发送了kill()信号来终止它们。

    3. 我只是在一个任务方法中调用所有这些方法,或者子进程命令是否在不同的任务方法中,这样可以吗?这是我的tasks.py中唯一的任务,其他任务都是Python方法。

    4. 任何建议或帮助将不胜感激! :)

0 个答案:

没有答案