标签: os.system

Python:运行os.system后如何获取stdout?

我希望stdout在运行os.system调用后获取变量.

让我们以此行为例:

batcmd="dir"
result = os.system(batcmd)
Run Code Online (Sandbox Code Playgroud)

result将包含错误代码(stderr 0在Windows下或1在某些linux下用于上面的示例).

如何stdout在执行的命令中不使用重定向来获取上述命令?

python os.system stdout stderr python-2.7

79
推荐指数
6
解决办法
16万
查看次数

Linux命令行调用没有从os.system返回它应该的内容?

我需要对linux进行一些命令行调用并从中获取返回,但是如下所示只是返回0它应该返回一个时间值,比如00:08:19,我在常规命令行中测试完全相同的调用它返回时间值00:08:19所以我很困惑我做错了什么,因为我认为这是如何在python中做到这一点.

import os
retvalue = os.system("ps -p 2993 -o time --no-headers")
print retvalue
Run Code Online (Sandbox Code Playgroud)

python linux command-line os.system python-2.7

58
推荐指数
4
解决办法
31万
查看次数

没有输出的Python os.system

我正在运行这个:

os.system("/etc/init.d/apache2 restart")
Run Code Online (Sandbox Code Playgroud)

它会重新启动Web服务器,就像我应该直接从终端运行命令一样,它会输出:

* Restarting web server apache2 ... waiting [ OK ]

但是,我不希望它在我的应用程序中实际输出它.我该如何禁用它?谢谢!

python subprocess os.system

19
推荐指数
3
解决办法
4万
查看次数

Python try块不会捕获os.system异常

我有这个python代码:

import os
try:
  os.system('wrongcommand')
except:
  print("command does not work")
Run Code Online (Sandbox Code Playgroud)

代码打印:

wrongcommand: command not found
Run Code Online (Sandbox Code Playgroud)

而不是command does not work.有谁知道为什么它不打印我的错误信息?

python os.system try-catch except

18
推荐指数
4
解决办法
3万
查看次数

返回值x = os.system(..)

当我输入os.system("whoami")Python时,它以root身份返回root,但当我尝试将其分配给变量时,x = os.system("whoami")它将x的值设置为0.为什么?(:

python linux os.system

14
推荐指数
2
解决办法
8万
查看次数

子进程优于os.system的优点

我最近遇到了一些有关堆栈溢出的帖子,说子进程比os.system好得多,但是我很难找到确切的优点.

我遇到的一些例子:https: //docs.python.org/3/library/os.html#os.system

"子进程模块提供了更强大的工具来生成新进程并检索其结果;使用该模块比使用此函数更可取."

不知道它在哪些方面更强大,我知道在很多方面使用子进程更容易,但实际上它在某种程度上更强大吗?

另一个例子是:

/sf/answers/6247041/

子进程系统的优点是它更灵活(你可以得到stdout,stderr,"真正的"状态代码,更好的错误处理等等).

这篇帖子有2600多张选票.再一次找不到更好的错误处理或真实状态代码意味着什么.

该帖子的最高评论是:

无法理解为什么你使用os.system即使是快速/脏/一次性.子进程看起来好多了.

同样,我理解它使一些事情稍微容易些,但我几乎无法理解为什么例如:

subprocess.call("netsh interface set interface \"Wi-Fi\" enable", shell=True)
Run Code Online (Sandbox Code Playgroud)

比任何更好

os.system("netsh interface set interface \"Wi-Fi\" enabled")
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释一些它更好的原因吗?

python subprocess os.system

11
推荐指数
2
解决办法
5988
查看次数

从一个python脚本返回值到另一个

我有两个文件:script1.py和script2.py.我需要从script1.py调用script2.py并将script2.py中的值返回给script1.py.但问题是script1.py实际上是通过os运行script2.py.

script1.py:

import os
print(os.system("script2.py 34"))
Run Code Online (Sandbox Code Playgroud)

script2.py

import sys
def main():
    x="Hello World"+str(sys.argv[1])
    return x

if __name__ == "__main__":
    x= main()
Run Code Online (Sandbox Code Playgroud)

如您所见,我能够将值输入script2,但不能返回script1.我怎样才能做到这一点?注意:要调用script2.py,就像它的命令行执行一样.这就是我使用操作系统的原因.

python os.system python-3.x

9
推荐指数
2
解决办法
3万
查看次数

使用os.system()的Python'源HOME/.bashrc'

我正在编写一个python脚本(Linux),它正在添加一些shell别名(将它们写入HOME/.bash_aliases).

为了在编写后立即使用别名,我应该发出以下bash内置:

source HOME/.bashrc
Run Code Online (Sandbox Code Playgroud)

source 是一个内置的bash所以我不能只:

os.system(source HOME/.bashrc)
Run Code Online (Sandbox Code Playgroud)

如果我尝试类似的东西:

os.system('/bin/bash -c source HOME/.bashrc')
Run Code Online (Sandbox Code Playgroud)

...将冻结脚本(就像等待某事一样).

有什么建议 ?

python bash os.system

8
推荐指数
1
解决办法
1万
查看次数

TypeError:必须是没有空字节的字符串,而不是str

我正在尝试运行此代码,对我拥有的每一帧运行相同的命令(几乎没有变化):

traj.reset()
import os
#os.chdir(outname)
for i, frame in enumerate(traj):
    frame.superpose()
    comando = "python hollow.py -c constraint -o hollow_%s.pdb urei%s.pdb" % (i, i)
    os.system(comando)
    pml_cmd = "pymol urei%s.pdb hollow_%s.pdb -c -d 'as cartoon, urei%s;color gray90, urei%s;center chain A;set_view (\-0.605158150,0.089404292,0.791067421,\0.795849979,0.093013920,0.598304033,\-0.020089993,0.991641700,-0.127439827,\0.000000000,0.000000000,-202.017959595,\-28.771762848,-7.683309555,10.745590210,\-568.485290527,972.520690918,-20.000000000);bg white;as sphere, hollow_%s;color cyan, hollow_%s;ray;save urei%s.png' " % (i, i, i, i, i, i, i)
    os.system(pml_cmd)
    #remove = "rm urei%s.pdb hollow_%s.pdb" % (i, i)
    #os.system(remove)
os.chdir("../")
Run Code Online (Sandbox Code Playgroud)

我运行这个,我得到这个错误:


TypeError                                 Traceback (most recent call last)
<ipython-input-8-53cd3e7bd107> in <module>()
      7     os.system(comando)
          8     pml_cmd = …
Run Code Online (Sandbox Code Playgroud)

python null byte os.system

8
推荐指数
1
解决办法
2万
查看次数

如何通过os.system确定进程的pid

我想用一个程序启动几个子进程,即一个模块foo.py启动几个实例bar.py.

由于我有时必须手动终止进程,因此我需要进程id来执行kill命令.

即使整个设置非常"脏" pid,如果过程是通过启动进行的,还是有一种很好的pythonic方式来获取进程os.system吗?

foo.py:

import os
import time
os.system("python bar.py \"{0}\ &".format(str(argument)))
time.sleep(3)
pid = ???
os.system("kill -9 {0}".format(pid))
Run Code Online (Sandbox Code Playgroud)

bar.py:

import time
print("bla")
time.sleep(10) % within this time, the process should be killed
print("blubb")
Run Code Online (Sandbox Code Playgroud)

python linux subprocess os.system

7
推荐指数
1
解决办法
2万
查看次数