打开终端运行命令python

时间:2017-04-10 20:52:18

标签: python

我正在尝试打开终端并在其中运行命令。我正在使用

os.system("gnome-terminal -e 'bash -c \"exec bash; MY_COMMAND; exec bash\" '")

这会打开一个新终端,但不会执行该命令。

2 个答案:

答案 0 :(得分:5)

exec命令用新的命令替换当前正在运行的进程,因此如果要运行的命令列表中有一个exec,则只要运行exec,就不会运行任何其他命令。因此,您要将'bash -c \"exec bash; MY_COMMAND; exec bash\" '替换为bash,然后在exec bash正在运行之后不执行任何操作。试试这个:

os.system("gnome-terminal -e 'bash -c \"MY_COMMAND\" '")

或者如果你需要一个终端保持开放,试试这个:

os.system("gnome-terminal -e 'bash -c \"MY_COMMAND; sleep 1000000\" '")

如果您希望终端保持打开并处于bash shell中,请尝试以下操作:

os.system("gnome-terminal -e 'bash -c \"MY_COMMAND; bash\" '")

答案 1 :(得分:0)

我们走了......

#include <vector>
#include <iostream>
#include <algorithm>

struct B { };
struct C : public B { };
struct D : public B { };

enum idClass { isB, isC, isD };

int main ()
 {
   using pib = std::pair<idClass, B>;

   std::vector<pib> vpb;

   vpb.emplace_back(isC, C{});
   vpb.emplace_back(isD, D{});
   vpb.emplace_back(isD, D{});
   vpb.emplace_back(isD, D{});
   vpb.emplace_back(isC, C{});
   vpb.emplace_back(isC, C{});
   vpb.emplace_back(isD, D{});
   vpb.emplace_back(isD, D{});


   std::sort(vpb.begin(), vpb.end(), [](pib const & p1, pib const & p2)
             { return p1.first < p2.first; });

   for ( auto const & p : vpb )
      std::cout << "- " << p.first << std::endl;
 }

应该这样做......

command="python3 --version"
os.system("gnome-terminal -e 'bash -c \""+command+";bash\"'")

输出进入了一个新的终端......