【无标题】

文章介绍了如何利用Python的subprocess模块在Linux环境中打开多个终端窗口,并在每个终端中顺序执行一系列命令。特别地,它展示了如何处理持续输出的命令,等待特定字符串出现后再继续执行后续命令。此外,还提到了如何保持终端打开以及在所有命令执行完毕后关闭终端的方法。
摘要由CSDN通过智能技术生成

可以使用Python的subprocess模块来打开多个Linux终端,并在每个终端中执行多个命令。以下是一个示例代码,可以在Ubuntu环境下打开两个终端,并在第一个终端中执行五个命令,等待命令执行结束并获取相应的输出值之后再打开第二个终端,并在其中执行五个命令,保证两个终端都不退出:

 

python复制

import subprocess

# 打开第一个终端并执行五个命令
commands1 = ['cd /path/to/directory', 'echo "Hello, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands1:
    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, cwd='/path/to/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 打开第二个终端并执行五个命令
commands2 = ['cd /path/to/another/directory', 'echo "Goodbye, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands2:
    subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/another/directory')

# 保持两个终端不退出
subprocess.run(['bash'], shell=True)
 

在上面的代码中,我们首先执行了第一个终端的五个命令,并在每个命令执行后打印输出。然后,我们使用subprocess.run()函数打开第二个终端,并在其中执行另外五个命令。在执行第二个终端的命令时,我们将每个命令作为一个字符串传递给gnome-terminal命令,并使用--参数将其与bash -c命令分隔开来。

最后,我们使用subprocess.run()函数打开一个新的终端,并将其设置为bash shell,以保持两个终端都不退出。请注意,由于我们在第一个终端中执行的命令已经完成并输出了相应的结果,因此在第二个终端中执行的命令不会受到第一个终端中命令的影响。

再确保两个终端的相应命令都执行完毕并获取相应输出之后,再打开第三个终端,执行五条命令,并保证终端在命令执行结束后不退出

可以使用Python的subprocess模块来打开多个Linux终端,并在每个终端中执行多个命令。以下是一个示例代码,可以在Ubuntu环境下打开三个终端,分别执行五个命令,并保证三个终端都不退出:

 

python复制

import subprocess

# 打开第一个终端并执行五个命令
commands1 = ['cd /path/to/directory', 'echo "Hello, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands1:
    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, cwd='/path/to/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 打开第二个终端并执行五个命令
commands2 = ['cd /path/to/another/directory', 'echo "Goodbye, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands2:
    result = subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/another/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 等待第二个终端的命令执行完毕
input("Press Enter to continue...")

# 打开第三个终端并执行五个命令
commands3 = ['cd /path/to/third/directory', 'echo "Third Terminal!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands3:
    subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/third/directory')

# 保持三个终端不退出
subprocess.run(['bash'], shell=True)

 

在上面的代码中,我们首先执行了第一个终端的五个命令,并在每个命令执行后打印输出。然后,我们使用subprocess.run()函数打开第二个终端,并在其中执行另外五个命令。在执行第二个终端的命令时,我们将每个命令作为一个字符串传递给gnome-terminal命令,并使用--参数将其与bash -c命令分隔开来。

接着,我们使用input()函数等待用户按下Enter键,以确保第二个终端的所有命令都已经执行完毕并获取了相应的输出。

最后,我们使用subprocess.run()函数打开第三个终端,并在其中执行另外五个命令。在执行第三个终端的命令时,我们将每个命令作为一个字符串传递给gnome-terminal命令,并使用--参数将其与bash -c命令分隔开来。

请注意,由于我们使用了gnome-terminal命令来打开终端,因此你需要确保你的Linux系统中已经安装了GNOME桌面环境。如果你使用的是其他桌面环境或终端模拟器,请相应地更改命令。

在三个终端的命令都执行结束之后,手动将三个终端都关闭

在三个终端的命令都执行结束之后,你可以手动将三个终端都关闭。在每个终端中,你可以使用exit命令来退出终端。

如果你想在Python代码中自动关闭这三个终端,可以使用subprocess模块打开一个新的终端,然后在其中执行pkill gnome-terminal命令来关闭所有的gnome-terminal进程。以下是一个示例代码:

 

python复制

import subprocess

# 打开第一个终端并执行五个命令
commands1 = ['cd /path/to/directory', 'echo "Hello, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands1:
    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, cwd='/path/to/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 打开第二个终端并执行五个命令
commands2 = ['cd /path/to/another/directory', 'echo "Goodbye, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands2:
    result = subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/another/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 等待第二个终端的命令执行完毕
input("Press Enter to continue...")

# 打开第三个终端并执行五个命令
commands3 = ['cd /path/to/third/directory', 'echo "Third Terminal!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands3:
    subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/third/directory')

# 等待所有终端的命令执行完毕
input("Press Enter to close all terminals...")

# 关闭所有的gnome-terminal进程
subprocess.run(['gnome-terminal', '-e', 'bash -c "pkill gnome-terminal"'])

 

在上面的代码中,我们首先执行了第一个终端的五个命令,并在每个命令执行后打印输出。然后,我们使用subprocess.run()函数打开第二个终端,并在其中执行另外五个命令。在执行第二个终端的命令时,我们将每个命令作为一个字符串传递给gnome-terminal命令,并使用--参数将其与bash -c命令分隔开来。

接下来,我们等待第二个终端的命令执行完毕,并在控制台中输入任意字符。然后,我们使用subprocess.run()函数打开第三个终端,并在其中执行另外五个命令。在所有终端的命令都执行完毕后,我们再次在控制台中输入任意字符。最后,我们使用subprocess.run()函数打开一个新的终端,并在其中执行pkill gnome-terminal命令来关闭所有的gnome-terminal进程。

在第二个终端中,有一条命令在执行过程中会持续输出字符串,在获取到指定的字符串之后再继续执行吓一条命令

可以使用Python的subprocess模块来打开多个Linux终端,并在每个终端中执行多个命令。以下是一个示例代码,可以在Ubuntu环境下打开两个终端,并在第一个终端中执行五个命令,等待命令执行结束并获取相应的输出值之后再打开第二个终端,并在其中执行五个命令,其中第三个命令会在执行过程中持续输出字符串,直到获取到指定的字符串之后再继续执行下一条命令:

 

python复制

import subprocess
import time

# 打开第一个终端并执行五个命令
commands1 = ['cd /path/to/directory', 'echo "Hello, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands1:
    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, cwd='/path/to/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 打开第二个终端并执行五个命令
commands2 = ['cd /path/to/another/directory', 'echo "Goodbye, World!"', 'echo "Starting long command..."', 'long_command', 'ls']
output = ''
for command in commands2:
    if command == 'long_command':
        # 在执行长命令时等待指定的字符串出现
        while True:
            result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, cwd='/path/to/another/directory')
            output = result.stdout.decode('utf-8')
            print(output)
            if 'specified string' in output:
                break
            time.sleep(1)
    else:
        result = subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/another/directory')
        output = result.stdout.decode('utf-8')
        print(output)

# 保持两个终端不退出
subprocess.run(['bash'], shell=True)

 

在上面的代码中,我们首先执行了第一个终端的五个命令,并在每个命令执行后打印输出。然后,我们使用subprocess.run()函数打开第二个终端,并在其中执行另外五个命令。在执行第二个终端的命令时,我们将每个命令作为一个字符串传递给gnome-terminal命令,并使用--参数将其与bash -c命令分隔开来。

在第二个终端的第三个命令中,我们使用一个while循环来不断执行long_command命令,并检查输出是否包含指定的字符串。如果输出包含指定的字符串,则跳出循环,继续执行下一条命令。在检查输出时,我们使用了time.sleep(1)函数来等待一秒钟,以避免过度消耗系统资源。

请将代码中的/path/to/directory/path/to/another/directorylong_command替换为你自己的目录和命令。

字符串是在命令执行过程中不断新生成的,使用print(output)可以将不断生成的结果打印出来吗

可以使用print(output)语句将每次long_command命令的输出打印出来,以便在输出中查找指定的字符串。在上面的示例代码中,我们使用了while循环来等待指定的字符串出现,并在每次循环中都打印出long_command命令的输出。

需要注意的是,如果long_command命令的输出非常大,可能会导致程序卡住或崩溃。为了避免这种情况,你可以将long_command命令的输出写入一个文件中,然后在每次循环中读取文件,并查找指定的字符串。以下是一个示例代码:

 

python复制

import subprocess
import time

# 打开第一个终端并执行五个命令
commands1 = ['cd /path/to/directory', 'echo "Hello, World!"', 'ls', 'pwd', 'ls']
output = ''
for command in commands1:
    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, cwd='/path/to/directory')
    output = result.stdout.decode('utf-8')
    print(output)

# 打开第二个终端并执行五个命令
commands2 = ['cd /path/to/another/directory', 'echo "Goodbye, World!"', 'echo "Starting long command..."', 'long_command > output.txt', 'ls']
output = ''
for command in commands2:
    if command == 'long_command > output.txt':
        # 在执行长命令时等待指定的字符串出现
        while True:
            with open('output.txt', 'r') as f:
                output = f.read()
                print(output)
                if 'specified string' in output:
                    break
            time.sleep(1)
    else:
        result = subprocess.run(['gnome-terminal', '--', 'bash', '-c', command], stdout=subprocess.PIPE, cwd='/path/to/another/directory')
        output = result.stdout.decode('utf-8')
        print(output)

# 删除输出文件
subprocess.run(['rm', '-f', 'output.txt'])

# 保持两个终端不退出
subprocess.run(['bash'], shell=True)

 

在上面的代码中,我们将long_command命令的输出重定向到一个名为output.txt的文件中,并在每次循环中读取文件,并查找指定的字符串。如果找到了指定的字符串,就跳出循环。在循环结束后,我们使用subprocess.run(['rm', '-f', 'output.txt'])命令删除输出文件。

请注意,上面的代码仅供参考,具体实现方式可能因环境和需求不同而有所差异。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值