Hướng dẫn python execute shell command redirect output to file - python thực hiện lệnh shell chuyển hướng đầu ra đến tệp

1

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Xin chào, tôi đang cố gắng thực thi script shell từ python bằng lệnh sau.

os.system("sh myscript.sh")

Trong tập lệnh shell của tôi, tôi đã viết một số SOP, bây giờ làm thế nào để tôi có được SOP trong Python của tôi để tôi có thể đăng nhập chúng vào một số tệp?

Tôi biết sử dụng subprocess.Popen Tôi có thể làm điều đó, vì một số lý do tôi không thể sử dụng nó.

p=subprocess.Popen(
        'DMEARAntRunner \"'+mount_path+'\"',
         shell=True,
         stdout=subprocess.PIPE,
         stderr=subprocess.STDOUT
)
while 1:
    line=p.stdout.readline()[:-1]
    if not line:
        break
    write_to_log('INFO',line)
    p.communicate()

Hướng dẫn python execute shell command redirect output to file - python thực hiện lệnh shell chuyển hướng đầu ra đến tệp

César

9.7916 huy hiệu vàng50 huy hiệu bạc71 Huy hiệu đồng6 gold badges50 silver badges71 bronze badges

hỏi ngày 16 tháng 4 năm 2012 lúc 15:59Apr 16, 2012 at 15:59

2

Vui lòng kiểm tra tài liệu chính thức này sử dụng mô -đun phụ trong Python. Hiện tại nó là cách được đề xuất đối với các cuộc gọi hệ điều hành để thực hiện các chức năng hệ thống và truy xuất kết quả. Liên kết trên cung cấp các ví dụ rất gần với những gì bạn cần.

Đã trả lời ngày 16 tháng 4 năm 2012 lúc 16:21Apr 16, 2012 at 16:21

Subietsubietsubiet

1.3591 Huy hiệu vàng12 Huy hiệu bạc18 Huy hiệu đồng1 gold badge12 silver badges18 bronze badges

Nếu tôi hiểu chính xác câu hỏi của bạn, bạn muốn một cái gì đó như thế này:

import subprocess
find_txt_command = ['find', '-maxdepth', '2', '-name', '*.txt']
with open('mylog.log', 'w') as logfile:
    subprocess.call(find_txt_command, stdout=logfile, shell=False)

Bạn có thể sử dụng popen thay vì gọi nếu bạn cần, cú pháp rất giống nhau. Lưu ý rằng lệnh là một danh sách với quy trình bạn muốn chạy và các đối số. Nói chung, bạn muốn sử dụng popen/cuộc gọi với shell = false, nó ngăn chặn hành vi bất ngờ có thể khó gỡ lỗi và nó có khả năng di động hơn.

Đã trả lời ngày 16 tháng 4 năm 2012 lúc 16:27Apr 16, 2012 at 16:27

Bi Ricobi RicoBi Rico

24.7K3 Huy hiệu vàng49 Huy hiệu bạc72 Huy hiệu đồng3 gold badges49 silver badges72 bronze badges

Cá nhân tôi sẽ khuyên bạn nên để lại đối số shell với giá trị mặc định của nó là False. Trong trường hợp đó, đối số đầu tiên không phải là một chuỗi khi bạn gõ vào thiết bị đầu cuối, mà là một danh sách "các từ", đầu tiên là chương trình, những điều sau đó là đối số. Điều này có nghĩa là không cần phải trích dẫn các đối số, làm cho chương trình của bạn trở nên kiên cường hơn với các đối số trắng và các cuộc tấn công tiêm.

Cái này cần phải dùng mẹo:

p = subsprocess.Popen(['DMEARAntRunner', mount_path], 
    stdout=subprocess.PIPE,stderr=subprocess.STDOUT)

Như mọi khi với việc thực hiện các lệnh shell, câu hỏi vẫn là liệu đó là cách dễ nhất/tốt nhất để giải quyết vấn đề, nhưng đó là một cuộc thảo luận khác hoàn toàn.

Bukzor

36.7K11 Huy hiệu vàng75 Huy hiệu bạc107 Huy hiệu đồng11 gold badges75 silver badges107 bronze badges

Đã trả lời ngày 16 tháng 4 năm 2012 lúc 16:08Apr 16, 2012 at 16:08

MaienMMAIENMMaienM

3451 Huy hiệu Bạc6 Huy hiệu Đồng1 silver badge6 bronze badges

4

Tôi có vấn đề sau:

  • Tôi cần chuyển hướng tiêu chuẩn ra đầu ra.file

Tôi có một kịch bản được viết bằng Python (tôi không có manh mối về Python). Tôi chạy tập lệnh bằng thiết bị đầu cuối bash trong Linux (Ubuntu) như sau:

python3 -m venv venv
source venv/bin/activate
pip install pythonscript
pythonscript --argument > output.file

Kết quả là,

  • Pythonscript chạy hoàn hảo,
  • đầu ra.file trống,
  • Đầu ra có thể nhìn thấy trong cửa sổ thiết bị đầu cuối Bash - theo hiểu biết của tôi - là tiêu chuẩn.

Sự kết luận:

  • Chuyển hướng trong trường hợp này không hoạt động.

  • Thật không thể quên tôi không có manh mối về Python. Tôi đoán các vấn đề đến do thực tế, rằng tôi đang ở trong một loại môi trường ảo python3 -m venv venv.

Làm thế nào tôi có thể chuyển hướng đầu ra của pythonscript đến đầu ra của tôi.file?

Làm cách nào để chuyển hướng đầu ra python vào một tệp?

Tuy nhiên, bạn có thể chuyển hướng đầu ra đó sang một tệp bằng bất kỳ chức năng nào sau đây:..
Chuyển hướng vỏ. Cách tiếp cận phổ biến nhất để chuyển hướng đầu ra tiêu chuẩn sang tệp là sử dụng chuyển hướng shell. ....
Sử dụng sys.stdout. ....
Sử dụng hàm bối cảnh.Redirect_stdout (). ....
Lớp đăng nhập tùy chỉnh ..

Làm thế nào để bạn thực hiện lệnh shell trong python và nhận đầu ra?

Nhận đầu ra từ lệnh shell bằng cách sử dụng lệnh con khởi chạy lệnh shell mà chúng tôi muốn thực thi bằng hàm subprocess.popen.Các đối số cho lệnh này là lệnh shell dưới dạng danh sách và chỉ định đầu ra và lỗi.Đầu ra từ quy trình con.Launch the shell command that we want to execute using subprocess. Popen function. The arguments to this command is the shell command as a list and specify output and error. The output from subprocess.

Tôi có thể sử dụng Python để thực thi các lệnh shell không?

Python cho phép bạn thực thi các lệnh shell, mà bạn có thể sử dụng để bắt đầu các chương trình khác hoặc quản lý tốt hơn các tập lệnh shell mà bạn sử dụng để tự động hóa.Tùy thuộc vào trường hợp sử dụng của chúng tôi, chúng tôi có thể sử dụng hệ điều hành.hệ thống (), quy trình con.chạy () hoặc quy trình con., which you can use to start other programs or better manage shell scripts that you use for automation. Depending on our use case, we can use os. system() , subprocess. run() or subprocess.

Làm cách nào để chuyển đầu ra của tập lệnh Python cho biến shell?

Đầu ra tiêu chuẩn có thể được đưa vào vỏ: Chương trình Python |đọc tên biến;hoặc biến tên = 'python-program' '..
var=`produce_output.py`.
# hoặc bạn có thể sử dụng $ () thay vì `backticks`.
# Nếu đó là những gì bạn tham gia ..
# Điều này giả định rằng bạn muốn đầu ra tiêu chuẩn ..
# Bạn cũng có thể chuyển hướng lỗi tiêu chuẩn theo tiêu chuẩn ..