2015-06-08 24 views
4

我有一个python代码,它有一些部分需要在前台运行,因为它告诉我们socket连接是否正确。现在运行该部分后,输出将写入文件。将python代码运行后移到后台

有没有办法在前台运行一些明确的步骤后,自动从前台移动运行的Python代码(进程),以便我可以继续我的终端工作。

我知道使用screen是一个选项,但有没有其他的方式来做到这一点。由于在前台运行一部分后,终端上不会显示任何输出,因此我不想不必要地运行屏幕。

+0

哪个操作系统和shell? – cdarke

+0

Ubuntu 14.04LTS和bash –

+0

您是否希望在python或bash中执行此操作? – cdarke

回答

4

在Python中,你可以从目前的终端分离,注意,这只会工作的类似UNIX的系统:

# Foreground stuff 
value = raw_input("Please enter a value: ") 

import os 

pid = os.fork() 
if pid == 0: 
    # Child 
    os.setsid() # This creates a new session 
    print "In background:", os.getpid() 

    # Fun stuff to run in background 

else: 
    # Parent 
    print "In foreground:", os.getpid() 
    exit() 

在Bash中,你真的只能交互地做事情。当你想放置Python进程转入后台使用CTRL + Z(领导$是一个通用的bash提示符的惯例):

$ python gash.py 
Please enter a value: jjj 
^Z 
[1]+ Stopped     python gash.py 
$ bg 
[1]+ python gash.py & 
$ jobs 
[1]+ Running     python gash.py & 

注意的是,在Python代码使用setsid()显示进程在jobs中,由于后台作业管理由shell完成,而不是由python完成。

1

如果您有#!/斌/包膜蟒蛇,它的权限设置是否正确,你可以尝试像nohup /path/to/test.py &

+0

但是不会在启动后台运行程序吗? –

+0

哦对。你能不能只按Ctrl-Z这个过程,然后用bg在后台重新启动?另外,如果你想把它带到前台,那么你可以使用fg – Jeremy