Django中得到subprocess.Popen在芹菜干净的回报

问题描述 投票:1回答:1

我有一个调用subprocess.Popen又名外壳CMD但对于一些reasone不是CMD的输出被保存到用户现场,但进程内存ID的芹菜任务!?!?

[2019-02-09 21:35:05,526: INFO/MainProcess] Received task: MyProject.tasks.allocate_new_btc_address[08d7db34-5710-4224-be07-c968599d9039]  
[2019-02-09 21:35:05,540: WARNING/ForkPoolWorker-9] <subprocess.Popen object at 0x7f31063d79b0>
[2019-02-09 21:35:05,540: INFO/ForkPoolWorker-9] MyProject.tasks.allocate_new_btc_address[08d7db34-5710-4224-be07-c968599d9039]: New BTC address has been allocated to a user account
[2019-02-09 21:35:05,540: INFO/ForkPoolWorker-9] Task MyProject.tasks.allocate_new_btc_address[08d7db34-5710-4224-be07-c968599d9039] succeeded in 0.012948354000400286s: None
iubcasiuiuBIUcb723iub7c8732iewe

tasks.朋友

@app.task
def allocate_new_btc_address(user_pk):
    user = User.objects.get(pk=user_pk)
    new_address = subprocess.Popen(['electrum', 'createnewaddress'])
    try:
        user.acc_btc_addr = new_address
        user.save()
        print(new_address)
        logger.info("New BTC address has been allocated to a user account")
    except Exception as e:
        print(e)

就是这样被保存到字段中的值:

<subprocess.Popen object at 0x7f31063d79b0>

提前致谢

python django shell subprocess
1个回答
1
投票

POPEN返回一个对象。获得直接输出,使用subprocess.check_output()函数:

from subprocess import check_output
new_address = check_output(['electrum', 'createnewaddress'])
© www.soinside.com 2019 - 2024. All rights reserved.