Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python3的两个不同终端中启动两个shell sudo脚本_Python_Shell_Terminal_Sudo - Fatal编程技术网

在python3的两个不同终端中启动两个shell sudo脚本

在python3的两个不同终端中启动两个shell sudo脚本,python,shell,terminal,sudo,Python,Shell,Terminal,Sudo,我有一个嵌入式系统,我在上面实时运行代码。每次我想要运行代码时,我都会在两个不同的终端中启动两个脚本:“run1.sh”和“run2.sh”。我可以在终端中看到这些脚本的输出(我也希望如此) 现在我想制作一个python脚本,在两个不同的终端中启动这两个脚本。我仍然希望看到他们的产出。我还想从python脚本向终端插入密码,因为脚本是在sudo模式下运行的。我在supbrocess和PIPES上玩了很多,但我从未同时达到上述所有要求。如何满足这些要求 我正在使用Ubuntu btw(所以我有gn

我有一个嵌入式系统,我在上面实时运行代码。每次我想要运行代码时,我都会在两个不同的终端中启动两个脚本:“run1.sh”和“run2.sh”。我可以在终端中看到这些脚本的输出(我也希望如此)

现在我想制作一个python脚本,在两个不同的终端中启动这两个脚本。我仍然希望看到他们的产出。我还想从python脚本向终端插入密码,因为脚本是在sudo模式下运行的。我在supbrocess和PIPES上玩了很多,但我从未同时达到上述所有要求。如何满足这些要求

我正在使用Ubuntu btw(所以我有gnome终端)


更新:我的问题可能不清楚,但这必须在python脚本中。这不是为了我的方便,而是集成过程的一部分。脚本的代码将是大型python程序的一部分,因此问题的关键是如何在python中执行此操作。

您可以安装
Terminator
,并为每个终端配置一个配置文件,以运行所需的任何脚本

我有一个默认模板,如果您想:

当我加载该配置文件时,第一个配置文件会将我移动到我的项目目录并列出它们。下一个将运行df-h以查看可用空间和较低的我的ip配置

这种方法可以节省大量编程,而且非常简单

更新:它将运行任何命令、bash、zsh、python等。。可用于您的终端。如果脚本在本地计算机中:

python#第一个终端配置文件
python#第二个终端配置文件
两者将“同时”执行

如果您的脚本在目标机器中是远程的,只需使用ssh创建一个bash脚本,用私钥连接到远程机器,然后运行该脚本,两种情况下的结果是相同的


编辑:最好是为每个终端设置颜色和透明度,这样你可以在工作时欣赏企鹅的自拍。

根据你添加的新信息,我创建了一个小python脚本,它将分别启动两个终端及其输出:

主脚本:

mortiz@florida:~/Documents/projects/python/split_python_execution$ cat split_pythonstuff.py 
#!/usr/bin/python3
import subprocess

subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script1.py'])
subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script2.py'])
mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script1.py 
#!/usr/bin/python3

while True :
   print ('script 1')
mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script2.py 
#!/usr/bin/python3

while True:

    print ('script 2')
脚本1:

mortiz@florida:~/Documents/projects/python/split_python_execution$ cat split_pythonstuff.py 
#!/usr/bin/python3
import subprocess

subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script1.py'])
subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script2.py'])
mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script1.py 
#!/usr/bin/python3

while True :
   print ('script 1')
mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script2.py 
#!/usr/bin/python3

while True:

    print ('script 2')
脚本2:

mortiz@florida:~/Documents/projects/python/split_python_execution$ cat split_pythonstuff.py 
#!/usr/bin/python3
import subprocess

subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script1.py'])
subprocess.call(['gnome-terminal', '-x', 'python', '/home/mortiz/Documents/projects/python/split_python_execution/script2.py'])
mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script1.py 
#!/usr/bin/python3

while True :
   print ('script 1')
mortiz@florida:~/Documents/projects/python/split_python_execution$ cat script2.py 
#!/usr/bin/python3

while True:

    print ('script 2')
从这里我想你可以开发任何你想要的东西

更新:关于sudo

Sudoers
是控制特定用户是否提供密码可以执行哪些操作的好方法

如果在/etc/sudoers中添加此行,则在将sudo传递给命令时不需要密码:

<YOUR_USER> ALL = NOPASSWD : /usr/bin/python <SCRIPT.py>

您只需要在前面的代码中实现它。

您所说的“两个不同的终端”是什么意思?您可能最好首先使用tmux/screen作为根,完全避免使用python和“如何在不向任何图形进程授予权限的情况下授予所需权限”的问题.@Rishav两个不同的gnome终端通常“我想在两个不同的窗口中运行它”是一个错误的设计决策,只需运行用户在screen/nohup/which中运行它们即可。@tripleee在这种情况下,用户除了单击UI中的按钮外,不知道该做什么。这就是为什么我把重点放在融合而不是友谊上的原因抱歉,我的问题可能不清楚。它必须在python脚本中,它将与其他python代码集成。我已经更新了问题,让它更清楚。@Tasos您可以运行任何您想要的命令。可以是python或bash。是的,但是我需要在每台运行代码的机器上安装和配置terminator。有很多机器我都无法访问,所以它不是一个option@Tasos不是这样,你只需要在你的机器上安装terminator,然后在你的其他机器上远程执行代码。正如我所说,我没有访问任何机器的权限。这确实有效,我单独做了类似的测试,但它不包括bash+sudo需求。但是你提醒我,我可以链接python调用来实现我想要的。只需传递
sudo run1.sh
而不是
python script.py
即可。是的,我已经尝试过了,但它还不包括自动输入密码。更新sudoers文件需要访问计算机(因此不是一个选项,我们需要一个python解决方案)。我已经检查了您链接的问题,但我已将其与subprocess/os.popen一起尝试,但它不起作用。我需要一个满足问题中所述所有要求的python解决方案。由于这似乎很难实现,我现在正在研究从我的执行链中完全删除sudo特权要求。@Tasos链接确实有效,我已经对其进行了测试,并将输出放在了答案中。您只需将该代码附加到python子流程中即可。Stackoverflow是一个您应该展示您的工作并让人们帮助您完成的地方,而不是另一种方式。此时,答案提供了满足您需要的工具。