我想在Python中同时使用raw_input和nohup

1 投票
3 回答
1937 浏览
提问于 2025-04-17 05:39

我正在处理一个很大的数据集,运行这个程序需要几天时间,所以我在终端使用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 &

这样一切就会按照你想要的方式运行——如果我理解得没错的话。

撰写回答