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[]
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?