Cách đơn giản nhất để sao chép một tập lệnh python trong Linux là gì? Tôi cần rằng điều này làm việc với mọi hương vị của Linux, vì vậy nó chỉ nên sử dụng các công cụ dựa trên python.Cách đơn giản nhất để sao chép một tập lệnh python trong Linux là gì?
Trả lời
Xem Stevens và cũng lengthy thread on activestate này mà tôi tìm thấy cá nhân để được cả hai chủ yếu là không chính xác và nhiều để tiết, và tôi đến với điều này:
from os import fork, setsid, umask, dup2
from sys import stdin, stdout, stderr
if fork(): exit(0)
umask(0)
setsid()
if fork(): exit(0)
stdout.flush()
stderr.flush()
si = file('/dev/null', 'r')
so = file('/dev/null', 'a+')
se = file('/dev/null', 'a+', 0)
dup2(si.fileno(), stdin.fileno())
dup2(so.fileno(), stdout.fileno())
dup2(se.fileno(), stderr.fileno())
Nếu bạn cần phải dừng lại quá trình đó một lần nữa, nó là cần thiết để biết pid, các giải pháp thông thường cho điều này là pidfiles. Làm điều này nếu bạn cần một
from os import getpid
outfile = open(pid_file, 'w')
outfile.write('%i' % getpid())
outfile.close()
Vì lý do bảo mật, bạn có thể xem xét bất kỳ trong số này sau demonizing
from os import setuid, setgid, chdir
from pwd import getpwnam
from grp import getgrnam
setuid(getpwnam('someuser').pw_uid)
setgid(getgrnam('somegroup').gr_gid)
chdir('/')
Bạn cũng có thể sử dụng nohup nhưng điều đó không làm việc tốt với python's subprocess module
Sử dụng grizzled.os.daemonize :
$ easy_install grizzled
>>> from grizzled.os import daemonize
>>> daemon.daemonize()
Để hiểu cách thức hoạt động hoặc tự mình thực hiện, hãy đọc the discussion on ActiveState.
Nếu bạn không quan tâm đến các cuộc thảo luận thực tế (có xu hướng đi lạc hậu và không cung cấp phản hồi có thẩm quyền), bạn có thể chọn một số thư viện sẽ làm cho thị hiếu của bạn dễ dàng hơn. Tôi muốn recomment lấy một cái nhìn tại ll-xist, thư viện này có chứa số lượng lớn mã tiết kiệm cuộc sống, như cron jobs helper, daemon framework, và (điều gì không thú vị với bạn, nhưng thực sự tuyệt vời) hướng đối tượng XSL (ll-xist chính nó).
Đó là một bộ thư viện thú vị, tôi sẽ thử nó. Cảm ơn. – edomaur
Tôi đã sử dụng gần đây Turkmenbashi:
$ easy_install turkmenbashi
import Turkmenbashi
class DebugDaemon (Turkmenbashi.Daemon):
def config(self):
self.debugging = True
def go(self):
self.debug('a debug message')
self.info('an info message')
self.warn('a warning message')
self.error('an error message')
self.critical('a critical message')
if __name__=="__main__":
d = DebugDaemon()
d.config()
d.setenv(30, '/var/run/daemon.pid', '/tmp', None)
d.start(d.go)
- 1. Cách đơn giản nhất để SSH bằng Python là gì?
- 2. Cách đơn giản nhất để sao chép đối tượng ArrayBuffer là gì?
- 3. Cách đơn giản nhất để sao chép int thành byte []
- 4. Cách đơn giản nhất để đặt tập lệnh python vào khay hệ thống (Windows)
- 5. Lệnh Linux để sao chép một tệp vào nhiều tệp
- 6. Ngôn ngữ nào là dễ nhất để phát triển dòng lệnh/GUI đơn giản cho Linux?
- 7. Phương pháp đơn giản để kết xuất đầu vào ống vào một tệp là gì? (Linux)
- 8. Cách tốt nhất để sao chép danh sách là gì?
- 9. "lambda" có nghĩa là gì trong Python, và cách đơn giản nhất để sử dụng nó là gì?
- 10. Cách tốt nhất để viết về cách viết một bộ x86 đơn giản là gì?
- 11. Cách đơn giản nhất không tốn nhiều bộ nhớ để xuất XML từ Python là gì?
- 12. Cách tốt nhất để sao chép sâu một băm băm trong Perl là gì?
- 13. Hệ thống đơn giản nhất để gửi tin nhắn từ máy chủ Linux là gì?
- 14. Cách đơn giản nhất để song song một tác vụ trong java là gì?
- 15. Cách đơn giản nhất cho các chương trình Clojure và Python để chia sẻ thông tin là gì?
- 16. Có nghĩa là gì trong các tập lệnh linux? #!/Usr/bin/python -tT
- 17. Cách đơn giản nhất để giảm ngày trong Javascript là 1 ngày là gì?
- 18. Cách nhanh nhất để lấy nhiều bản sao của một cây trong python là gì?
- 19. Cách đơn giản để chạy tập lệnh sqlplus từ java
- 20. Cách tốt nhất để nhân bản/sao chép một Observablearray trong knockoutJS là gì?
- 21. Cách nhanh nhất để sao chép một bảng trong mysql?
- 22. Thuật toán đơn giản nhất để thoát khỏi một ký tự đơn lẻ là gì?
- 23. Trong Vim, cách đơn giản nhất để nối tất cả các dòng trong một tệp vào một dòng là gì?
- 24. Cách tốt nhất để thêm tập lệnh python vào ứng dụng QT là gì?
- 25. Eclipse Eclipse: Cách dễ nhất để sao chép một lớp là gì?
- 26. Cách dễ nhất để có được đầu ra tập lệnh Python trên web là gì?
- 27. Cách tốt nhất để sao chép/sao chép sâu một từ điển .NET chung là gì <string, T>?
- 28. Cách đơn giản nhất để viết thành stdout ở chế độ nhị phân là gì?
- 29. Cách đơn giản nhất để phân tích cú pháp JSON trong Scala là gì?
- 30. Cách đơn giản nhất để tạo cửa sổ hình trong wxPython là gì?
Một lưu ý - Đề nghị cung cấp một cách để chạy chương trình của bạn ở mặt trước, cả hai để gỡ lỗi và folks người thích các công cụ giám sát quá trình (như runit [http://smarden.org/runit] hoặc daemontools [http://cr.yp.to/daemontools.html]) để chạy chương trình của bạn dưới dạng dịch vụ được giám sát thay vì một daemon. –
Có, tôi đồng ý (Tôi đang sử dụng daemontools) – edomaur
liên quan: [Làm thế nào để bạn tạo một daemon bằng Python?] (Http://stackoverflow.com/q/473620/4279) – jfs