我希望stdout
在运行os.system
调用后获取变量.
让我们以此行为例:
batcmd="dir"
result = os.system(batcmd)
Run Code Online (Sandbox Code Playgroud)
result
将包含错误代码(stderr
0
在Windows下或1
在某些linux下用于上面的示例).
如何stdout
在执行的命令中不使用重定向来获取上述命令?
我需要对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) 我正在运行这个:
os.system("/etc/init.d/apache2 restart")
Run Code Online (Sandbox Code Playgroud)
它会重新启动Web服务器,就像我应该直接从终端运行命令一样,它会输出:
* Restarting web server apache2 ...
waiting [ OK ]
但是,我不希望它在我的应用程序中实际输出它.我该如何禁用它?谢谢!
我有这个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
.有谁知道为什么它不打印我的错误信息?
当我输入os.system("whoami")
Python时,它以root身份返回root
,但当我尝试将其分配给变量时,x = os.system("whoami")
它将x的值设置为0.为什么?(:
我最近遇到了一些有关堆栈溢出的帖子,说子进程比os.system好得多,但是我很难找到确切的优点.
我遇到的一些例子:https: //docs.python.org/3/library/os.html#os.system
"子进程模块提供了更强大的工具来生成新进程并检索其结果;使用该模块比使用此函数更可取."
不知道它在哪些方面更强大,我知道在很多方面使用子进程更容易,但实际上它在某种程度上更强大吗?
另一个例子是:
子进程与系统的优点是它更灵活(你可以得到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)
任何人都可以解释一些它更好的原因吗?
我有两个文件: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脚本(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)
...将冻结脚本(就像等待某事一样).
有什么建议 ?
我正在尝试运行此代码,对我拥有的每一帧运行相同的命令(几乎没有变化):
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) 我想用一个程序启动几个子进程,即一个模块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) os.system ×10
python ×10
linux ×3
subprocess ×3
python-2.7 ×2
bash ×1
byte ×1
command-line ×1
except ×1
null ×1
python-3.x ×1
stderr ×1
stdout ×1
try-catch ×1