我想在Python中同时使用raw_input和nohup
我正在处理一个很大的数据集,运行这个程序需要几天时间,所以我在终端使用nohup来运行我的脚本。
这次我需要先从终端获取一个输入,然后再通过nohup让我的代码开始运行。有没有什么建议可以做到这一点呢?
所以我首先需要从终端获取输入,像这样:
$ python myprogram.py
enter_input: SOMETHING
然后这个过程应该是这样的:
$nohup python myprogram.py &
但我想在终端里一步到位完成这个操作。希望我的解释清楚明了 :)
3 个回答
1
你可以让你的程序在读取输入后“分叉”到后台运行,具体可以参考这个链接。不过,更简单的方法是把你的程序放在tmux或者GNU screen里面运行。
2
这里还有一个选择,如果你想保持输入框的用户友好性。我做了类似的事情,因为我需要一个密码输入框,不想让用户在终端上显示他们的密码。正如这里所描述的,你可以创建一个小的包装脚本,里面有输入框(可以选择是否隐藏输入),然后通过上面提到的sys.argv方法传递这些变量。你可以把它保存为一个可执行的my_program.sh,内容大致如下:
echo enter_input:
read input
echo enter_password:
read -s password
nohup python myprogram.py $username $password &
现在,运行 ./my_program.sh
的效果就和你最初的 python my_program.py
一样。
1
我觉得你的程序不应该从标准输入(stdin)读取数据,而是通过命令行给它传递数据。
所以,不要这样做:
startdata = raw_input('enter_input:')
而是应该这样:
import sys
startdata = sys.argv[1]
然后你可以用下面的方式启动你的程序:
$ nohup python myprogram.py SOMETHING &
这样一切就会按照你想要的方式运行——如果我理解得没错的话。