Tôi đang cố gắng lên lịch chạy nhiều trăn bằng tệp hàng loạt.
Ví dụ: có các tệp python của tôi mà tôi muốn lên lịch chạy chúng hàng ngày
D:\py\s1.py
D:\py\s2.py
Bây giờ làm thế nào tôi có thể kết hợp hai tệp này thành một .bat, để tôi có thể lên lịch chạy hai tệp này bằng cách sử dụng python.exe
[C:\python27\python.exe
] cùng một lúc.
Cảm ơn bạn
Bali c
29,8K35 Huy hiệu vàng120 Huy hiệu bạc151 Huy hiệu đồng35 gold badges120 silver badges151 bronze badges
Hỏi ngày 14 tháng 12 năm 2012 lúc 14:30Dec 14, 2012 at 14:30
1
Phương pháp 1: Tệp dơi.: Bat file.
Nếu bạn có Python trong biến môi trường đường dẫn:
start python D:\py\s1.py
start python D:\py\s2.py
Đường khác theo nghĩa đen
start C:\python27\python.exe D:\py\s1.py
start C:\python27\python.exe D:\py\s2.py
Lưu ý rằng điều này sẽ không chờ đợi để trả lại từ một trong hai thực thi. Lưu ý, đừng quên thêm các trích dẫn xung quanh các chuỗi đường dẫn nếu chúng chứa khoảng trắng hoặc ký tự đặc biệt.
Xem start /?
để biết thêm trợ giúp và tùy chọn.
Phương pháp 2: Hai nhiệm vụ theo lịch trình khác nhau: Two different Scheduled Tasks
Tạo hai nhiệm vụ theo lịch trình riêng biệt bắt đầu cùng một lúc mỗi lần gọi Python để chạy một trong các tập lệnh.
Đã trả lời ngày 14 tháng 12 năm 2012 lúc 14:39Dec 14, 2012 at 14:39
David Ruhmanndavid RuhmannDavid Ruhmann
10,8K2 Huy hiệu vàng35 Huy hiệu bạc47 Huy hiệu đồng2 gold badges35 silver badges47 bronze badges
0
- Tất cả các cộng đồng
- Ý tưởng ArcGIS
- Cơ bản cộng đồng
- Nhà
- Tất cả các cộng đồng
- Ý tưởng ArcGIS
- Cơ bản cộng đồng
- Nhà
- Nhà phát triển
Python
- Câu hỏi Python
- Tệp .bat để chạy nhiều tập lệnh .py
- Tùy chọn
- Đăng ký nguồn cấp dữ liệu RSS
- Đánh dấu chủ đề là mới
- Đánh dấu chủ đề như đã đọc
- Nổi chủ đề này cho người dùng hiện tại
- Đánh dấu
Đặt mua
Tắt tiếng
Trang thân thiện với máy in
Tôi đang tìm kiếm thông tin về cách viết đúng tệp .bat sẽ chạy nhiều tập lệnh Python theo tuần tự.
Nếu một trong những tập lệnh đó không thành công thì tôi cần quá trình dừng lại.
start /wait D://PythonScripts/Script1
start /wait D://PythonScripts/Script2
start /wait D://PythonScripts/Script3
start
/wait D://PythonScripts/Script4
- Nhưng tôi cần sau đó để chạy theo trình tự và đợi trước khi bắt đầu tiếp theo.
- Tôi nghĩ rằng điều này là gần nhưng không có gì trong đó phá thai nếu thất bại.
- @echo tắt/chờ & nbsp; d: // pythonscripts/script1start/wait & nbsp; d: // pythonscripts/script2start/wait & nbsp;
Tất cả những bài viết
Tôi tạo một danh sách để lưu trữ các lỗi trong gần bắt đầu tập lệnh Python
Errlist = []
Trong phần ngoại trừ của các tập lệnh Python của bạn [bẫy lỗi], bạn cần đặt mã sau để bẫy các thông báo lỗi và ghi chúng vào tệp nhật ký:
Ngoại trừ ngoại lệ là E:
ErrList.append[e.message]
& nbsp; & nbsp; & nbsp; faillog = open ["đường dẫn đến tệp nhật ký"/faillogfile, 'w'];
& nbsp; & nbsp; & nbsp; faillog.write ["Các lỗi sau đây đã gặp phải:"]
FailLog.write[ErrList[0]]FailLog.write[ErrList[0]]
FailLog.close[]
Trong tệp BAT, tôi kiểm tra sự tồn tại của tệp faillog theo tên khi tôi đổi tên nhật ký thất bại trước đó ở đầu tệp BAT để đảm bảo không có tệp faillog nào bằng tên cụ thể đó tồn tại khi bắt đầu các cuộc gọi đến các tập lệnh Python.
Nếu tồn tại Faillog [Goto: Bail]
Bạn có thể có thể đơn giản hóa phần này và chỉ có if & nbsp; tồn tại faillog [goto: exit]
:EXIT
9 câu trả lời
Có vẻ như bạn có thể làm một cái gì đó với sys.exit [] hoặc exit [] để trả về không phải là dấu nhắc lệnh, [mã thoát 1], sau đó thêm một số logic trong .bat để kiểm tra mã thoát ..
BAT có thể xử lý điều này bằng cách sử dụng thực thi có điều kiện shell, mà không cần vụng về nếu các câu lệnh trên %errorLevel %.
&& có nghĩa là thực thi lệnh tiếp theo miễn là không có lỗi nào được trả về từ công cụ chạy trước đó. PS có một toán tử tương tự "-and"
@echo off
pushd D:\PythonScripts
Script1.py && Script2.py && Script3.py && Script4.py
Các tập tin hàng loạt - Thực thi có điều kiện & NBSP;
Cú pháp - Tôi có thể nhận được && để làm việc trong PowerShell không? - Stack Overflow & NBSP;
Điều này yêu cầu tập lệnh python của bạn sẽ trả lại điều kiện lỗi cho shell, điều này sẽ xảy ra nếu Python không bị hỏng, nhưng nếu bạn đang cố gắng/ngoại trừ bạn sẽ phải để tập lệnh của mình với sys.exit [1] để trả về Một điều kiện lỗi đối với vỏ [sys.exit [] sẽ không làm điều đó, bạn cần cung cấp 1].
Trong tệp BAT của tổ chức của tôi, chúng tôi kiểm tra sự tồn tại của nhật ký thất bại được tạo trong bất kỳ tập lệnh Python nào là một phần của tệp BAT. & nbsp; Nếu nhật ký thất bại tồn tại [nó được đổi tên vào đầu mỗi lần chạy] tại bất kỳ điểm nào giữa các cuộc gọi Python, thì tệp BAT thoát ra một cách duyên dáng mà không chạy phần còn lại của các tập lệnh Python.
Vì vậy, bạn sẽ cần phải ghi vào một nhật ký lỗi trong mã python của bạn và sau đó kiểm tra tệp này trong tệp bat của bạn
Nếu tồn tại thất bại.log [goto: bail] khác echo fail.log không tìm thấy
:BAIL
Goto: Thoát
:EXIT
Nếu tôi chạy như dưới đây sẽ hoạt động? & nbsp; chỉ không có sự thất bại an toàn về việc một trong những tập lệnh có thất bại hay không?
@echo tắt/chờ & nbsp; d: // pythonscripts/script1start/wait & nbsp; d: // pythonscripts/script2start/wait & nbsp;
start /wait D://PythonScripts/Script1
start /wait D://PythonScripts/Script2
start /wait D://PythonScripts/Script3
start /wait D://PythonScripts/Script4
Với tệp BAT hiện tại của bạn, không có cách nào để nó ngừng chạy tập lệnh liên tiếp & nbsp; python nếu nó thất bại trên tập lệnh Python hiện tại vì nó sẽ chỉ thoát khỏi tập lệnh Python hiện tại với lỗi và chuyển sang tập lệnh Python tiếp theo. & nbsp; bạn cần nói rõ ràng cho tệp BAT không chạy liên tiếp & nbsp; python script nếu tập lệnh hiện tại không thành công và đó là những gì mà nhật ký thất bại dành cho.
Bây giờ nếu các tập lệnh Python không phụ thuộc vào nhau để làm việc đúng, thì thiết lập hiện tại của bạn có thể hoạt động.
Trong kịch bản của tôi, các tập lệnh Python phụ thuộc vào nhau, vì vậy nếu 1 tập lệnh Python thất bại, tôi không muốn chạy các tập lệnh liên tiếp.
Phải, phần đó tôi hiểu ... chỉ muốn xác nhận ... sẽ chỉ cho bài kiểm tra này ... và thêm thất bại & nbsp; an toàn vào một ngày khác.
Cảm ơn những suy nghĩ của bạn.
Bất kỳ ví dụ về mã để thực hiện thử nghiệm? & nbsp; Tạo tệp nhật ký và sau đó kiểm tra nếu nó tồn tại? & nbsp; Tôi giả sử tôi làm điều này trong tập lệnh Python và không có trong tệp Bat.
Tôi tạo một danh sách để lưu trữ các lỗi trong gần bắt đầu tập lệnh Python
Errlist = []
Trong phần ngoại trừ của các tập lệnh Python của bạn [bẫy lỗi], bạn cần đặt mã sau để bẫy các thông báo lỗi và ghi chúng vào tệp nhật ký:
Ngoại trừ ngoại lệ là E:
ErrList.append[e.message]
& nbsp; & nbsp; & nbsp; faillog = open ["đường dẫn đến tệp nhật ký"/faillogfile, 'w'];
& nbsp; & nbsp; & nbsp; faillog.write ["Các lỗi sau đây đã gặp phải:"]
FailLog.write[ErrList[0]]FailLog.write[ErrList[0]]
FailLog.close[]
Trong tệp BAT, tôi kiểm tra sự tồn tại của tệp faillog theo tên khi tôi đổi tên nhật ký thất bại trước đó ở đầu tệp BAT để đảm bảo không có tệp faillog nào bằng tên cụ thể đó tồn tại khi bắt đầu các cuộc gọi đến các tập lệnh Python.
Nếu tồn tại Faillog [Goto: Bail]
Bạn có thể có thể đơn giản hóa phần này và chỉ có if & nbsp; tồn tại faillog [goto: exit]
:EXIT
Hello,
Tôi đang tìm cách làm một cái gì đó rất giống nhau ở đây. Tôi có 6 tập lệnh riêng lẻ mà tôi muốn có một tệp .bat khởi động. Tuy nhiên, tệp .bat hiện tại của tôi chỉ thực thi tập lệnh đầu tiên chứ không phải các tập lệnh khác. Các tập lệnh không phụ thuộc vào nhau, nhưng thật tuyệt khi ghi lại bất kỳ tập lệnh nào thất bại.
Đây là những gì tôi có trong tệp .bat của tôi:
Xin chào, & nbsp; Jaykapalczynski có suy nghĩ nào về điều này không? Tự hỏi nếu bạn tìm thấy một giải pháp làm việc cho bài viết gốc của bạn? Cảm ơn!jaykapalczynski any thoughts on this? Wondering if you found a solution that worked for your original post? Thanks!
- Jaykapalczynski
- Điều khoản sử dụng
- Hướng dẫn cộng đồng
- Cơ bản cộng đồng
- Sự riêng tư
- Trung tâm Tin tưởng
- Hợp pháp
- Liên hệ với ESRI