如何在新终端的python中运行linux终端命令

时间:2018-04-13 08:35:34

标签: python linux subprocess

我读了很多关于如何在python中使用子进程模块运行linux shell命令的答案。在我的情况下,我需要在我的python代码中运行linux shell命令,以便在新终端中执行这些命令。

subprocess.call(["df","-h"] 

我正在基本终端运行说xyz.py,当我执行上面的命令时,它会覆盖同一终端中xyz.py的输出。我希望此命令在不同的终端中执行,或者我想将此命令的输出存储在文本文件中。

subprocess.call(["df","-h",">","somefile.txt"])

以上命令无效。

编辑-1: 如果我将输出保存在文本文件中,我还必须通过python显示它。

谢谢!

3 个答案:

答案 0 :(得分:2)

import subprocess
fp = open("somefile.txt", "w")
subprocess.run(["df", "-h"], stdout=fp)
fp.close

使用文件句柄。

如果要在保存输出时打印输出:

import subprocess
cp = subprocess.run(["df", "-h"], stdout=subprocess.PIPE)
print(cp.stdout)
fp = open("somefile.txt", "w")
print(cp.stdout, file=fp)
fp.close()

答案 1 :(得分:0)

你试过os.system吗?

os.system("gnome-terminal -e 'your command'")

答案 2 :(得分:0)

if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
                // updateViewToLandscape();
                //  if(!needToHideNavBar()){
                videoPlayerFragment.getPlayerImpl().root.getLayoutParams().height = getScreenHeight();
                //  draggablePanel.setTopFragmentResize(true);
                draggablePanel.setTopViewHeight(getScreenHeight());
                // draggablePanel.setBottomFragment(new Fragment);
                draggablePanel.initializeView();
//                    draggablePanel.isClickToMaximizeEnabled();
//                    draggablePanel.isClickToMaximizeEnabled();
              //  hookDraggableViewListener();

                // draggablePanel.getRootView().settou
             //   this.getWindow().setFlags(
                      //  WindowManager.LayoutParams.FLAG_FULLSCREEN,
                      //  WindowManager.LayoutParams.FLAG_FULLSCREEN);
                //  }
            } else {
                if (getRequestedOrientation() == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) {
                }
                videoPlayerFragment.getPlayerImpl().root.getLayoutParams().height = 600;
                draggablePanel.setTopViewHeight(600);

                // draggablePanel.setBottomFragment(new Fragment);
                draggablePanel.initializeView();
//                    draggablePanel.isClickToMaximizeEnabled();
//                    draggablePanel.isClickToMaximizeEnabled();
                //hookDraggableViewListener();
                //  draggablePanel.setTopViewHeight(400);

                //updateViewToPortrait(true);
              //  this.getWindow().clearFlags(
                       // WindowManager.LayoutParams.FLAG_FULLSCREEN);

            }

以上代码正常运作。如果有任何简单/有效的方法来做同样的事情,那将会很有帮助。