运行 os.system 作为子进程的命令 python
run os.system command as subprocess python
我想 运行 以下 os.system 命令作为子进程,以便知道它的 pid,因为我希望能够执行
proc.terminate()
波纹管是有效的 os.system()
命令。请注意,下面的命令已经打开了一个子 shell,因为那是 setview
正在做的事情,然后在该子 shell 中执行一个 python 脚本,然后退出该子 shell。
os.system("/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001")
我试过了
import subprocess
cmd = "/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001"
p=subprocess.Popen(cmd.split(), shell=True)
取自这个 Whosebug 线程:How to determine pid of process started via os.system
但它只执行第一个 /usr/atria/bin/cleartool
而不是其他命令。有人知道如何编写等同于我的 os.system 调用的子 shell 吗?
提前致谢。
.split
在这里对您没有任何帮助,因为引号内有您不想拆分的空格。要么直接传递一个字符串,让shell处理参数分离:
cmd = "/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001"
p=subprocess.Popen(cmd, shell=True)
或者手动分开命令:
cmd = [
"/usr/atria/bin/cleartool",
"setview",
"-exec",
# single quotes in the argument no longer required, as we're not going through the shell
"/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py",
"testUser__project_5_0_myProject_001"
]
p = subprocess.Popen(cmd)
你为什么要拆分你的命令?不要使用 cmd.split()。试试这个:
import subprocess
cmd = "/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001"
p=subprocess.Popen([cmd], stdout=subprocess.PIPE,shell=True)
out, err = p.communicate()
print out
我想 运行 以下 os.system 命令作为子进程,以便知道它的 pid,因为我希望能够执行
proc.terminate()
波纹管是有效的 os.system()
命令。请注意,下面的命令已经打开了一个子 shell,因为那是 setview
正在做的事情,然后在该子 shell 中执行一个 python 脚本,然后退出该子 shell。
os.system("/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001")
我试过了
import subprocess
cmd = "/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001"
p=subprocess.Popen(cmd.split(), shell=True)
取自这个 Whosebug 线程:How to determine pid of process started via os.system
但它只执行第一个 /usr/atria/bin/cleartool
而不是其他命令。有人知道如何编写等同于我的 os.system 调用的子 shell 吗?
提前致谢。
.split
在这里对您没有任何帮助,因为引号内有您不想拆分的空格。要么直接传递一个字符串,让shell处理参数分离:
cmd = "/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001"
p=subprocess.Popen(cmd, shell=True)
或者手动分开命令:
cmd = [
"/usr/atria/bin/cleartool",
"setview",
"-exec",
# single quotes in the argument no longer required, as we're not going through the shell
"/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py",
"testUser__project_5_0_myProject_001"
]
p = subprocess.Popen(cmd)
你为什么要拆分你的命令?不要使用 cmd.split()。试试这个:
import subprocess
cmd = "/usr/atria/bin/cleartool setview -exec '/usr/bin/python /home/testUser/Development/Scripts/setDoneFlag_Count_Lines.py' testUser__project_5_0_myProject_001"
p=subprocess.Popen([cmd], stdout=subprocess.PIPE,shell=True)
out, err = p.communicate()
print out