我正在处理大型数据集,运行需要几天时间,因此我使用nohup在终端中运行我的脚本。 这次我需要首先从终端获取raw_input然后通过nohup,我的代码开始运行。有什么建议我怎么做?
所以首先我需要像这样从终端获得输入
$ python myprogram.py
enter_input: SOMETHING
那么这个过程应该是这样的:
$nohup python myprogram.py &
但我想通过终端一步到位。我希望我的解释清楚:)
答案 0 :(得分:1)
您可以制作流程fork to the background after reading the input。但是,更简单的变体是在tmux或GNU screen内开始您的流程。
答案 1 :(得分:0)
我认为您的程序不应该从stdin读取输入,而是通过命令行提供数据。
所以而不是
startdata = raw_input('enter_input:')
你做了
import sys
startdata = sys.argv[1]
然后用
开始你的程序$ nohup python myprogram.py SOMETHING &
并且所有工作都按照您想要的方式进行 - 如果我帮助您。
答案 2 :(得分:0)
如果您想坚持使用输入框的用户友好特性,这里还有一个选项。我之所以这样做,是因为我需要密码字段,并且不希望用户在终端中显示密码。 As described here,您可以使用输入框(带有或不带有-s选项来隐藏)创建一个小的包装Shell脚本,然后通过上面的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
完全一样