2010-03-08 15 views
9

Tôi đang khởi chạy một tập lệnh Python từ dòng lệnh (Bash) trong Linux. Tôi cần phải mở Python, nhập khẩu một mô-đun, và sau đó có dòng mã giải thích. Giao diện điều khiển phải sau đó vẫn còn trong Python (không bỏ nó). Làm thế nào để làm điều đó?Nhập mô-đun Python từ Bash

Tôi đã thử một bí danh như thế này:

alias program="cd /home/myname/programs/; python; import module; line_of_code" 

Nhưng điều này chỉ bắt đầu trăn và các lệnh không được thực hiện (không nhập khẩu mô-đun, không có dòng mã được điều trị).

Cách thích hợp để thực hiện việc này là gì, miễn là tôi cần phải giữ cho Python mở (không thoát khỏi nó) sau khi tập lệnh được thực thi? Rất cám ơn!

Trả lời

5

Một cách dễ dàng để làm điều này là với "mã" mô-đun:

python -c "import code; code.interact(local=locals())" 

này sẽ thả bạn vào một vỏ tương tác khi code.interact() được gọi . Đối số từ khóa local đến interact được sử dụng để điền trước vùng tên mặc định cho trình thông dịch được tạo; chúng tôi sẽ sử dụng locals(), là hàm dựng sẵn trả về không gian tên cục bộ làm từ điển.

lệnh của bạn sẽ giống như thế này:

python -c "import mymodule, code; code.interact(local=locals())" 

mà giọt bạn thành một thông dịch viên có môi trường chính xác.

+0

Điều này chỉ hoạt động nửa chừng. Tôi đã thêm mô-đun nhập của mình, trước hoặc sau 'mã nhập' nhưng khi trong bảng điều khiển python tương tác, mô-đun của tôi không khả dụng. – Morlock

+1

Tôi nghĩ rằng các mô-đun mã có thể làm những gì bạn muốn, nhưng bạn phải bootstrap môi trường như thế này: python -c "nhập khẩu sys, mã; code.interact (local = locals())" Điều này thả tôi vào một lệnh shell cho phép tôi làm: >>> print sys.argv [0] Đây có phải là điều gần gũi hơn với những gì bạn đang cố gắng làm không? –

+0

Tuyệt vời! Điều này làm công việc cho tôi. Mô-đun riêng của tôi bây giờ cũng được tải (nhập sys, mã, mymodule; ...) Chúc mừng – Morlock

3

Ví dụ:

python -c "import time ; print 'waiting 2 sec.'; time.sleep(2); print 'finished' " 
+1

@Karol Thx, nhưng tôi phải duy trì trong Python trong giao diện điều khiển vì đây là một kịch bản tương tác. Tôi đã chỉnh sửa câu hỏi để thêm câu hỏi này. – Morlock

+1

Nếu bạn cần duy trì 'bên trong' python, hãy khởi động trình thông dịch với cờ '-i'. – ChristopheD

+0

Tôi đã thử với -i (có hoặc không có c-) nhưng tôi nhận được: 'python: không thể mở tệp' mô-đun nhập ': [Errno 2] Không có tệp hoặc thư mục nào' – Morlock

6

sử dụng một chương trình con thay vì bí danh

callmyprogram(){ 
    python -i -c "import time;print time.localtime()" 
} 
callmyprogram 
+0

@ ghostdog74 Tôi chưa bao giờ sử dụng chương trình con trước đó. Tôi đặt cái này ở đâu? Trong tệp .bashrc? (.bash_bashrc vì tôi đang sử dụng Linux Mint) Làm cách nào để khởi chạy? Cám ơn. – Morlock

+0

bạn có thể đặt nó trong bất kỳ tập lệnh nào. vì bạn có '.bash_bashrc', bạn có thể đặt nó ở đó. nếu bạn muốn sử dụng chương trình con, chỉ cần làm một 'nguồn .bash_bashrc' – ghostdog74

+0

+ cho sự kết hợp của' -i' và '-c', giải quyết vấn đề của OP. Trong khi đặt một cái gì đó trong một chức năng không bao giờ đau (để thêm tính linh hoạt), _an bí danh sẽ làm việc tốt như nhau ở đây_. Một lưu ý về thuật ngữ Bash: 'chương trình con' được sử dụng như một thuật ngữ ô cho cả hàm _shell_ và _sourced scripts_; do đó, tốt hơn nên gọi hàm này là _ [shell] function_. – mklement0