tôi sẽ bỏ qua tất cả những cảm giác lo lắng bạn đang có khả năng để có được từ cố gắng để tái -run mình và để nó trong tay của môi trường.
Bằng cách đó, tôi có nghĩa là:
Có một chương trình kiểm soát mà không gì hơn là chạy chương trình của bạn (với các thông số tương tự nó đã được đưa ra) trong một vòng lặp trong khi chương trình của bạn thoát ra với một "khởi động lại cụ thể "mã. Điều này có thể đơn giản như một tệp cmd
hoặc phức tạp như một chương trình Python (rất đơn giản) khác sử dụng os.system
). Về cơ bản, miễn là chương trình điều khiển lấy mã "khởi động lại", nó sẽ chạy lại chương trình của bạn với chính xác các tham số tương tự. Bất kỳ mã nào khác sẽ khiến mã đó thoát với mã đó.
Khi bạn muốn thoát hoàn toàn, hãy thoát khỏi chương trình Python thực bằng mã trả về 0 (hoặc bất kỳ thứ gì không phải là mã "khởi động lại" trong tình huống lỗi).
Nếu bạn chỉ muốn chuyển sang một lần lặp lại chương trình của mình (để đọc lại cấu hình chẳng hạn), hãy thoát bằng mã "khởi động lại" được chương trình kiểm soát nhận ra.
Nhưng bạn cũng có thể muốn suy nghĩ về việc tái kỹ thuật ứng dụng của mình để có thể đọc lại cấu hình của ứng dụng bất kỳ lúc nào. Điều này sẽ làm cho toàn bộ vấn đề biến mất. Bạn không đề cập đến lý do tại sao đó không phải là một lựa chọn vì vậy tôi giả sử bạn có một số lý do tại sao nó sẽ không hoạt động.
Nhưng, nếu không, đó là con đường tôi muốn chọn.
Để cung cấp một số mẫu mã cho các tùy chọn đầu tiên (đây là trên Windows nhưng dưới Cygwin - các quy tắc cơ bản giống nhau nên áp dụng cho Windows Python bản địa nhưng bạn nên kiểm tra giá trị trả về từ os.system
) .:
> cat phase1.py
#!/usr/bin/python
import os
status = 9
while status == 9:
status = int(os.system ("./phase2.py")/256) # exit code is upper 8 bits
print "Controller: %d"%(status)
> cat phase2.py
#!/usr/bin/python
import sys
import time
time.sleep(1)
val = int(time.time())%10
if val == 0:
rc = 0
else:
rc = 9
print "Program: %d -> %d"%(val,rc)
sys.exit(rc)
> ./phase1.py
Program: 2 -> 9
Controller: 9
Program: 3 -> 9
Controller: 9
Program: 4 -> 9
Controller: 9
Program: 5 -> 9
Controller: 9
Program: 7 -> 9
Controller: 9
Program: 8 -> 9
Controller: 9
Program: 9 -> 9
Controller: 9
Program: 0 -> 0
Controller: 0
Bạn có thể xem bộ điều khiển bằng mã thoát 9 để quyết định xem có chạy lại chương trình hay không. Chương trình chính nó là một câm mà trả về 9, trừ khi nó trên một bội 10 giây.
trên quy trình nền UNIX thường sử dụng trình xử lý tín hiệu, kiểm tra mô-đun tín hiệu trong python. bạn có thể có thể làm tương tự trong Windows – Anycorn
liên quan: [Có thể đặt cờ python -O (tối ưu hóa) trong một tập lệnh không?] (http://stackoverflow.com/q/7527055/4279) – jfs