【问题标题】:Running terminal commands from python script (Linux)从 python 脚本运行终端命令(Linux)
【发布时间】:2018-05-04 21:20:36
【问题描述】:

我正在尝试编写一个 python 脚本来做一些事情:

  1. 打开一个终端,cd 到一个目录,然后在那里运行一个命令。

  2. 打开第二个终端,cd 到另一个目录,并在那里执行一个文件。

步骤 1 的执行只有在步骤 2 完成后才能完成。第 1 步和第 2 步都应该通过 python(或其他语言)脚本完成。

我尝试使用 subprocess.Popen、subprocess.call、os.sytem,但这似乎不起作用。

有人知道怎么做吗?

我目前的代码:

import subprocess

terminal1 = subprocess.Popen(["gnome-terminal",'cd ~',"torcs -r ~/quickrace.xml"])
terminal2 = subprocess.Popen(['gnome-terminal','cd ~'])

【问题讨论】:

  • 向我们展示代码!
  • 你说的“似乎不起作用”是什么意思?实际上会发生什么?是的,还请发布您尝试过的代码。
  • 为什么需要终端?
  • 我仍然不确定您为什么需要一个终端。用户是否必须以某种方式与终端交互?

标签: python linux terminal


【解决方案1】:

我不知道它是否正是你想要的,但试试吧,用你想要的替换 $variables,我认为它会运行。

#!/bin/bash


xterm -e "pwd ; cd $PATH ; your command ; echo press RETURN to close this window ; read" # delete the echo and the read to don't stop the process and make it run quickly
xterm -e "pwd ; cd $OTHERPATH ; your command ; echo press RETURN to close this window ; read"

如果您没有安装 xterm,请考虑安装。 (rpm -i xterm 如果你有 rpm 包)

我在 python 中做了这个,但这并不是你想要的,但我认为这是一个开始。

# -*- coding: utf-8 -*-

import os

if __name__ == "__main__":
    os.system('xterm -e "pwd ; cd $PATH ; your command ; echo press RETURN to close this window ; read" &') # delete the echo and the read to don't stop the process and make it run quickly
    input("Press Enter to continue...")
    os.system('xterm -e "pwd ; cd $OTHERPATH ; your command ; echo press RETURN to close this window ; read" &')

【讨论】:

  • 询问python脚本问题
  • 非常感谢,这行得通!现在我的最后一个问题是是否可以循环运行它。这样两个窗口在进程完成时都会自动关闭,当它们都关闭时,它们应该重新开始。这可能吗?
  • 是的,但它更难,你可以在输入的地方用 sleep(x seconds) 放置一段时间(true),但这不是一个很好的解决方案。好的解决方案可以是检查术语的PID(进程ID)(它是一个指示运行xterm的进程的值),当进程结束时你开始下一个,所以一段时间包含一个看起来xterm的PID和结束时关闭 xterm 并在一段时间内启动第二个 xterm。我在工作,我不是一个大的硬编码 python,所以我现在无法检查它对不起。但这是我的想法。