2013-08-17 145 views
1

通过Ubuntu系统上的命令行(/ bin/sh),我执行了一个使用multiprocessing.Process()启动另一个Python3脚本的Python3脚本。我收到以下错误消息:从另一个脚本启动Python脚本 - 奇怪行为

[email protected]:/media/collier/BETABOTS/Neobot$ ./Betabot #THE SECOND SCRIPT NEVER EXECUTES 
/bin/sh: 1: Syntax error: "(" unexpected (expecting "}") 
Traceback (most recent call last): 
    File "./Betabot", line 26, in <module> 
    JOB_CONFIG = multiprocessing.Process(os.system('./conf/set_data.py3')) 
    File "/usr/lib/python3.3/multiprocessing/process.py", line 72, in __init__ 
    assert group is None, 'group argument must be None for now' 
AssertionError: group argument must be None for now 

#TESTING THE SECOND SCRIPT BY ITSELF IN TWO WAYS (both work) 
[email protected]:/media/collier/BETABOTS/Neobot$ python3 -c "import os; os.system('./conf/set_data.py3')" #WORKS 
[email protected]:/media/collier/BETABOTS/Neobot$ ./conf/set_data.py3 #WORKS 

问题是 - 为什么这不起作用?它应该启动第二个脚本,并继续执行出问题。

我对试图解决问题的代码进行了编辑。 错误现在在第13行。同样的错误发生在第12行“JOB_CONFIG = multiprocessing.Process(os.system('date')); JOB_CONFIG.start()”,我用它作为测试行。我将第12行更改为“os.system('date')”,并且工作正常,所以错误在于多处理命令

#!/usr/bin/env python3 
import os, subprocess, multiprocessing 
def write2file(openfile, WRITE): 
    with open(openfile, 'w') as file: 
     file.write(str(WRITE)) 
writetofile = writefile = filewrite = writer = filewriter = write2file 
global BOTNAME, BOTINIT 
BOTNAME = subprocess.getoutput('cat ./conf/startup.xml | grep -E -i -e \'<property name=\"botname\" value\' | ssed -r -e "s|<property name=\"botname\" value=\"(.*)\"/>|\1|gI"') 
BOTINIT = os.getpid() 

###Setup science information under ./mem/### 
JOB_CONFIG = multiprocessing.Process(os.system('date')); JOB_CONFIG.start() 
JOB_CONFIG = multiprocessing.Process(os.system('./conf/set_data.py3')); JOB_CONFIG.start() 
###START### 
write2file('./mem/BOTINIT_PID', BOTINIT); write2file('./mem/tty', os.ctermid()); write2file('./mem/SERVER_PID', BOTINIT) 
JOB_EMOTION = multiprocessing.Process(os.system('./lib/emoterm -T Emotion -e ./lib/Emotion_System')); JOB_EMOTION.start() 
JOB_SENSORY = multiprocessing.Process(os.system('./lib/Sensory_System')); JOB_SENSORY.start() 
print(BOTNAME + ' is starting'); JOB_CONFIG.join() 
try: 
    os.system('./lib/neoterm -T' + BOTNAME + ' -e ./lib/beta_engine') 
except: 
    print('There seems to be an error.'); JOB_EMOTION.join(); JOB_SENSORY.join(); exit() 
JOB_EMOTION.join(); JOB_SENSORY.join(); exit() 
+1

您不会因为愤怒而放弃问题而伤害任何人。相反,你应该[改进问题](http://meta.stackexchange.com/a/194077/185951)。 –

+0

你提到你得到一个错误。是这样吗?什么是错误? –

回答

1

当开始从Python3脚本是在主脚本继续运行Python3脚本,这样的命令,必须做到:

JOB_CONFIG = subprocess.Popen([sys.executable, './conf/set_data.py3']) 

的文件名字符串是脚本。这是保存到一个变量,以便我稍后操作该过程。例如,当主脚本应该等待另一个脚本时,我可以使用命令“JOB_CONFIG.wait()”。

至于错误消息的第一行中的那个哈希,这是由于使用的第一个子进程命令中的语法错误。

+1

['sys.exe.executable'](http://docs.python.org/3/library/sys.html#sys.executable)只是正在执行的当前python二进制文件的路径,例如'/ usr /斌/ python'。它可以是一个空字符串或'None'。 – jfs

+0

@ J.F.Sebastian,感谢您的纠正。 –