Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python os.system和子进程调用之间的差异_Python_Subprocess - Fatal编程技术网

Python os.system和子进程调用之间的差异

Python os.system和子进程调用之间的差异,python,subprocess,Python,Subprocess,我创建了一个程序,该程序在本地服务器中创建一个web架构,然后加载必要的浏览器以在localhost上显示html和php页面 调用os.system会杀死python进程,但不会杀死其他进程——例如,httpd.exe和mysqld.exe 子进程调用将杀死httpd.exe和mysqld.exe程序,但会继续运行python代码,并且在子进程调用后不会执行任何代码 在执行python代码之后,我将如何杀死或隐藏所有必要的进程 这是我的密码 os.makedirs(dr + x + '/adm

我创建了一个程序,该程序在本地服务器中创建一个web架构,然后加载必要的浏览器以在localhost上显示html和php页面

调用
os.system
会杀死python进程,但不会杀死其他进程——例如,
httpd.exe
mysqld.exe

子进程
调用将杀死
httpd.exe
mysqld.exe
程序,但会继续运行python代码,并且在
子进程
调用后不会执行任何代码

在执行python代码之后,我将如何杀死或隐藏所有必要的进程

这是我的密码

os.makedirs(dr + x + '/admin' + '/css')
dobj = open(dr + x + '/admin' + '/css' + '/style.css', 'w')
dobj.close()
del dobj
os.makedirs(dr + x + '/admin' + '/js')
os.makedirs(dr + x + '/admin' + '/img')
################################################################################
## THE OS SYSTEM CALLS CLOSE THE APP BUT OPEN THE PROCESSES
## AND THE SUBPROCESS CALLS CLOSE BOTH PROCESSES AND LEAVES THE APP OPEN
## CANT WIN!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
os.makedirs(dr + x + '/admin' + '/conf')
#os.system(r'C:\\xampp\\apache\\bin\\httpd.exe')
#os.system(r'C:\\xampp\\mysql\\bin\\mysqld.exe')
subprocess.Popen(['C:\\xampp\\apache\\bin\\httpd.exe'], shell=True, creationflags=subprocess.SW_HIDE)
subprocess.Popen(['C:\\xampp\\mysql\\bin\\mysqld.exe'], shell=True, creationflags=subprocess.SW_HIDE)
webbrowser.open('localhost/' + x)
sys.exit()
################################################################################


else:
    backmaybe = raw_input('Already Exists... Try Again? (Y/N) ')
if backmaybe == 'y':
    start()
else:
    sys.exit()

os.system
subprocess.Popen
之间的区别在于,Popen实际上打开了一个,而
os.system
启动了一个,很像
subprocess.call
。Windows只支持*nix操作系统的一半管道/外壳功能,但两者的区别应该基本相同。子shell不允许您像管道一样与另一个进程的标准输入和输出进行通信


您可能希望像现在这样使用子流程,但在应用程序终止之前调用管道对象上的kill()方法()。这将让您决定何时终止进程。您可能需要通过调用
pipe.communicate()
并关闭管道的文件句柄来满足进程想要执行的任何i/o操作。

sys.exit()
之后,httpd、mysqld的理想运行状态是什么?如果希望httpd、mysqld在脚本退出后继续运行;你可以用国旗。顺便说一句,你不需要
shell=True
。httpd和mysqld的运行状态应该是秘密运行的,我让它非常方便用户,不需要任何多余的窗口。@J.F.Sebastian我该如何实现这一点?我仍处于初级阶段,但非常感谢!求你了,看吧。