我正在尝试打开终端并在其中运行命令。我正在使用
os.system("gnome-terminal -e 'bash -c \"exec bash; MY_COMMAND; exec bash\" '")
这会打开一个新终端,但不会执行该命令。
答案 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\"'")
输出进入了一个新的终端......