Có thể (không cần thiết phải sử dụng nội suy python) để in mã nguồn của tập lệnh không?Kịch bản lệnh Python in mã nguồn của nó
Tôi muốn thực thi một tập lệnh python ngắn cũng in nguồn của nó (vì vậy tôi có thể xem các lệnh nào được thực hiện).
Kịch bản là một cái gì đó như thế này:
command1()
#command2()
command3()
print some_variable_that_contain_src
Các ứng dụng thực tế là tôi muốn chạy một kịch bản từ IPython với run -i
kỳ diệu và có như đầu ra nguồn (ví dụ: các lệnh thực hiện). Bằng cách này, tôi có thể kiểm tra các lệnh nào được nhận xét ở mỗi lần thực hiện. Hơn nữa, nếu được thực thi trong Notebook, tôi để lại dấu vết của các lệnh nào đã được sử dụng.
Giải pháp
Sử dụng korylprince giải pháp tôi kết thúc với một-liner để được đưa vào đầu của kịch bản:
with open(__file__) as f: print '\n'.join(f.read().split('\n')[1:])
này sẽ in các nguồn kịch bản ngoại trừ dòng đầu tiên (đó sẽ chỉ là tiếng ồn). Nó cũng dễ dàng để sửa đổi cắt để in một "lát" khác nhau của kịch bản.
Nếu bạn muốn in toàn bộ tập tin thay vào đó, một trong những-liner đơn giản hoá để:
with open(__file__) as f: print f.read()
có thể xem xét gói kiểm tra trong python: http://www.python.org/doc//current/library/inspect.html. Cụ thể phương thức 'getource' – Greg
Kiểu chương trình này được gọi là các chương trình Quine. http://en.wikipedia.org/wiki/Quine_(computing) Tôi đang cố gắng để viết một bản thân mình trong python, nó quá damn khó khăn. :( – thefourtheye
Tại sao lại xóa dòng đầu tiên? Bạn nhận được một tập lệnh, khi chạy, in ra mã nguồn * không chứa bất cứ điều gì về việc in mã nguồn của nó * .Nó gây nhầm lẫn. Dòng đầu tiên không phải là tiếng ồn nhiều hơn – user2357112