Bash在后台运行时未将Python多处理输出重定向到文件



为了运行单元测试,我想使用以下命令用Python设置一个本地SMTP服务器:

python -c "import smtpd, asyncore; smtpd.DebuggingServer(('127.0.0.1', 8025), None); asyncore.loop()" > test.log &

但是没有任何输出被写入test.log文件。

然而,当我运行时,输出确实会被写入

python -c "import smtpd, asyncore; smtpd.DebuggingServer(('127.0.0.1', 8025), None); asyncore.loop()" > test.log` or `python -c "print('TEST')" > test.log &

这与asyncore有关吗?或者这里发生了什么?

我使用的是带有Python 3.6的Mac OSX。

编辑:我尝试使用aiosmtpd模块和以下命令来启动服务器:

python -m aiosmtpd -n > test.log &

这给出了相同的结果。因此,这似乎只是在处理多处理循环时的一个问题

编辑2:简化了一些命令,删除了nohup和sudo,相同的问题仍然存在

编辑3:为了澄清,一旦我运行服务器,我就会在解释器中运行以下程序来发送消息:

import smtplib; server = smtplib.SMTP(host='127.0.0.1', port=8025); server.ehlo(); server.sendmail("sender@test.test", "receiver@test.test", "MESSAGE") 

编辑4:我甚至尝试过在一个文件中运行上面的asyncore.loop()

python test.py > test.log &

仍然没有运气

问题不是nohup,而是sudosudo必须询问您的密码,然后取消,因为它在后台无法询问您,因此,重新排序您的命令并激活sudo后台标志。。。

sudo -b nohup python -c "import smtpd, asyncore; smtpd.DebuggingServer(('127.0.0.1', 587), None); asyncore.loop()" > test.log

sudo -b取代了&,因为它将在后台运行python。

相关内容

  • 没有找到相关文章

最新更新