Tôi đã tạo một chương trình tạo kiến trúc web trên máy chủ cục bộ, sau đó tải trình duyệt cần thiết để hiển thị các trang html và php trên localhost.Sự khác biệt giữa os.system và subprocess gọi
Cuộc gọi os.system
giết chết quá trình python nhưng không giết chết các quá trình khác - ví dụ, httpd.exe
và mysqld.exe
Cuộc gọi subprocess
diệt các chương trình httpd.exe
và mysqld.exe
nhưng vẫn tiếp tục chạy mã python, và không có mã thực hiện sau cuộc gọi subprocess
.
Tôi sẽ làm cách nào để giết hoặc ẩn tất cả các quy trình cần thiết sau khi mã python được thực thi?
Đây là mã của tôi.
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()
trạng thái chạy mong muốn của httpd, mysqld sau 'sys.exit()' là gì? – jfs
nếu bạn muốn httpd, mysqld tiếp tục chạy sau khi tập lệnh của bạn đã thoát; bạn có thể sử dụng [DETACHED_PROCESS | CREATE_NEW_PROCESS_GROUP] (http://stackoverflow.com/a/13256908/4279) gắn cờ. btw, bạn không cần 'shell = True'. – jfs
trạng thái chạy của httpd và mysqld nên chạy ẩn, ive làm cho người dùng này rất thân thiện, không cần bất kỳ cửa sổ dư thừa nào. –