Hướng dẫn how do you run multiple commands at a time in python? - làm thế nào để bạn chạy nhiều lệnh cùng một lúc trong python?

Tôi muốn chạy ba lệnh cùng một lúc từ Python. Định dạng lệnh là truy vấn.pl -args

Hiện tại tôi đang làm

os.system("query.pl -results '10000' -serverName 'server1' >> log1.txt")

os.system("query.pl -results '10000' -serverName 'server2' >> log2.txt")

os.system("query.pl -results '10000' -serverName 'server3' >> log3.txt")

Tôi muốn truy vấn cả ba máy chủ cùng một lúc nhưng trong trường hợp này, mỗi lệnh chỉ thực hiện sau khi máy cuối cùng hoàn thành. Làm thế nào tôi có thể làm cho chúng đồng thời? Tôi đã nghĩ đến việc sử dụng '&' ở cuối nhưng tôi muốn phần tiếp theo của mã chỉ được chạy khi cả ba lệnh kết thúc

Hỏi ngày 28 tháng 10 năm 2009 lúc 20:28Oct 28, 2009 at 20:28

Hướng dẫn how do you run multiple commands at a time in python? - làm thế nào để bạn chạy nhiều lệnh cùng một lúc trong python?

ngẫu nhiênThoughTrandomth thinkrandomThought

5.95315 Huy hiệu vàng54 Huy hiệu bạc71 Huy hiệu Đồng15 gold badges54 silver badges71 bronze badges

3

Bạn có thể sử dụng mô -đun phụ và có cả ba hoạt động độc lập: sử dụng quy trình con.popen. Chăm sóc chính xác trong việc thiết lập tham số "shell" một cách chính xác.

Sử dụng phương thức Wait () hoặc Poll () để xác định khi nào các quy trình con kết thúc.

Đã trả lời ngày 28 tháng 10 năm 2009 lúc 20:30Oct 28, 2009 at 20:30

JLDUPONTJLDUPONTjldupont

90.2K56 Huy hiệu vàng196 Huy hiệu bạc313 Huy hiệu đồng56 gold badges196 silver badges313 bronze badges

2

os.system("query.pl -results '10000' -serverName 'server1' &") 
os.system("query.pl -results '10000' -serverName 'server2' &") 
os.system("query.pl -results '10000' -serverName 'server3' &")

Trong trường hợp này - quá trình sẽ được bắt đầu trong nền

Đã trả lời ngày 28 tháng 10 năm 2009 lúc 20:36Oct 28, 2009 at 20:36

OduvanoduvanOduvan

2.4473 huy hiệu vàng22 Huy hiệu bạc24 Huy hiệu đồng3 gold badges22 silver badges24 bronze badges

1

Bạn có thể sử dụng hàng đợi

tasks = ("query.pl -results '10000' -serverName 'server1'",\
"query.pl -results '10000' -serverName 'server2'",\
"query.pl -results '10000' -serverName 'server1'")

def worker():
    while True:
        item = q.get()
        os.system(item)

q = Queue()
for i in tasks:
     t = Thread(target=worker)
     t.setDaemon(True)
     t.start()

for item in tasks:
    q.put(item)

q.join()   

Đã trả lời ngày 28 tháng 10 năm 2009 lúc 20:41Oct 28, 2009 at 20:41

OduvanoduvanOduvan

2.4473 huy hiệu vàng22 Huy hiệu bạc24 Huy hiệu đồng3 gold badges22 silver badges24 bronze badges

1

&& [...] lệnh1 && lệnh2. ....

class CliSession:
    
    def __init__(some_id):
        self.id = some_id
        self.process = subprocess.Popen("initial command here")

    def run(command_str):
        self.process.execute(command_str)
        # wait to finish
        return self.process.output

def main():
    cli_session_0 = CliSession(0)
    cli_session_1 = CliSession(1)

    print(cli_session_0.run("export SOMETHING=10"))
    print(cli_session_1.run("echo $SOMETHING")) <- this should be nothing
    print(cli_session_0.run("echo $SOMETHING"))

Điều này sẽ được sử dụng để thực hiện những việc như có nhiều phiên cho các máy khác nhau hoặc có các phiên trong đó nhiều lệnh cần được chạy trước một lệnh khác, nhưng các lệnh ban đầu không được biết đến sau này. Nếu bất cứ ai có thể chỉ cho tôi đúng hướng, hoặc nếu popen không thể làm điều này, hãy cho tôi biết!

Tôi đã đăng một câu hỏi về Overflow Stack, nhưng không ai trả lời, vì vậy nếu bạn muốn một số upvote Overflow, bạn có thể trả lời ở đó: https://stackoverflow.com/questions/72007413/use-popen-to-have-sess -Rucky-Multiple-commands-at-a-prick-in-dom

Tệp này chứa văn bản unicode hai chiều có thể được giải thích hoặc biên dịch khác với những gì xuất hiện dưới đây. Để xem xét, hãy mở tệp trong một trình soạn thảo cho thấy các ký tự Unicode ẩn. Tìm hiểu thêm về các ký tự unicode hai chiều

#!/usr/bin/python
Nhập khẩu os
Nhập khẩu sys
Nhập khẩu select
Nhập khẩuParamiko paramiko
nhập khẩu time
ClassCommands: Commands:
def__init __ (self, retry_time = 0): __init__(self, retry_time=0):
self.retry_time=retry_time.retry_time = retry_time
đi qua
defrun_cmd (self, host_ip, cmd_list): run_cmd(self, host_ip, cmd_list):
i=0 = 0
Whiletrue: True:
# in ("Cố gắng kết nối với %s ( %i/ %i)" %(self.host, i, self.retry_time)))
thử::
ssh = paramiko.sshclient () = paramiko.SSHClient()
ssh.set_missing_host_key_policy (paramiko.autoaddpolicy ()).set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect (host_ip).connect(host_ip)
break
ngoại trừ paramiko.AuthenticationException:
in ("Xác thực thất bại khi kết nối với %s" %host_ip)("Authentication failed when connecting to %s" % host_ip)
sys.exit (1).exit(1)
ngoại trừ::
in ("Không thể SSH đến %s, chờ nó bắt đầu" %host_ip)("Could not SSH to %s, waiting for it to start" % host_ip)
i+=1 += 1
thời gian.s ngủ (2).sleep(2)
# Nếu chúng ta không thể kết nối trong giới hạn thời gian
ifi> = self.retry_time: i >= self.retry_time:
In ("Không thể kết nối với %s. Từ bỏ" %host_ip)("Could not connect to %s. Giving up" % host_ip)
sys.exit (1).exit(1)
ngoại trừ:
in ("Không thể SSH đến %s, chờ nó bắt đầu" %host_ip)
thời gian.s ngủ (2) command in cmd_list:
# Nếu chúng ta không thể kết nối trong giới hạn thời gian
ifi> = self.retry_time: "> " + command
In ("Không thể kết nối với %s. Từ bỏ" %host_ip)
# Sau khi kết nối thành công, stdout, stderr = ssh.exec_command(command)
# Gửi lệnh
forcommandincmd_list:
# lệnh in not stdout.channel.exit_status_ready():
in ">"+lệnh
# thực thi các lệnh stdout.channel.recv_ready():
stdin, stdout, stderr = ssh.exec_command (lệnh), wl, xl = select.select([ stdout.channel ], [ ], [ ], 0.0)
# Todo (): Nếu bị loại bỏ, hãy dừng lại len(rl) > 0:
# Chờ lệnh chấm dứt = stdout.channel.recv(1024)
whilenotstdout.channel.exit_status_ready (): = tmp.decode()
# Chỉ in dữ liệu nếu có dữ liệu để đọc trong kênh output
ifstdout.channel.recv_ready ():
rl, wl, xl = select.select ([stdout.channel], [], [], 0,0).close()
return
iflen (rl)> 0: main(argv=None):
tmp = stdout.channel.recv (1024) argv is None:
output = tmp.decode () "arguments expected"
PrintOutput:
# Đóng kết nối SSH
ssh.close ()
DEFMAIN (argv = none):
ifargvisnone:
In "Đối số mong đợi" "This method is not meant to be used directly"
return
khác: __name__ == "__main__":
# argv = {'',}(sys.argv[ 1: ])

Làm thế nào để bạn chạy nhiều lệnh cùng một lúc?

Phân đoạn một chuỗi các lệnh với dấu chấm phẩy là thông lệ phổ biến nhất khi bạn muốn chạy nhiều lệnh trong một thiết bị đầu cuối. Một phần lý do cho điều này là cách người vận hành thực hiện: nó chạy tất cả các lệnh trong chuỗi bất kể lệnh trước đó chạy thành công hay không thành công. is the most common practice when you want to run multiple commands in a terminal. Part of the reason for this is the way the operator performs: it runs all the commands in the sequence irrespective of whether the previous command ran successfully or failed.

Làm cách nào để chạy nhiều lệnh trong Windows?

Bạn có thể sử dụng các ký tự đặc biệt được liệt kê trong bảng sau để chuyển nhiều lệnh ...
& [...] Lệnh1 & Command2.Sử dụng để tách nhiều lệnh trên một dòng lệnh.....
&& [...] lệnh1 && lệnh2.....
||[...] lệnh1 ||lệnh2.....
() [...] (Command1 & Command2) ....
;hoặc, Command1 tham số1; tham số2 ..

Làm thế nào để bạn sử dụng dòng lệnh trong Python?

Để chạy các tập lệnh Python bằng lệnh Python, bạn cần mở một dòng lệnh và nhập từ python, hoặc python3 nếu bạn có cả hai phiên bản, theo sau là đường dẫn đến tập lệnh của bạn, giống như thế này: $ python3 hello.py xin chàoThế giới!Nếu mọi thứ hoạt động ổn, sau khi bạn nhấn Enter, bạn sẽ thấy cụm từ Hello World!open a command-line and type in the word python , or python3 if you have both versions, followed by the path to your script, just like this: $ python3 hello.py Hello World! If everything works okay, after you press Enter , you'll see the phrase Hello World!