Articles of os.system

如何确定通过os.system启动的进程的PID

我想用程序启动几个子foo.py ,即模块foo.py启动foo.py几个实例。 由于我有时不得不手动终止进程,我需要进程id来执行kill命令。 即使整个设置是相当“脏”,是否有一个良好的pythonic方式来获得进程的pid ,如果进程是通过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)) bar.py: import time print("bla") time.sleep(10) % within this time, the process should be killed print("blubb")

每次计算机从hibernate状态唤醒时运行一个python脚本

我在python上写了一个小脚本,它从控制台调用一个命令行来hibernate一台linux机器(或者closures它,以防一个单词改变),然后在一段时间后唤醒。 通过watch命令再次调用该命令。 import os import time os.system("watch -n 20 sudo rtcwake -u -s 10 -m mem") 所以rtcwake命令在电脑重新启动20秒后再次被调用。 每当电脑被唤醒时,我想要运行另一个脚本。 我已经有了这个其他的脚本,这是一个倒计时。 我想这样做是为了向用户显示剩下多less时间,直到计算机再次closures,但是第二个python脚本也应该在计算机每次唤醒后被调用 任何想法在这? 谢谢

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

当我在Python中键入os.system("whoami")时,它以root身份返回root ,但是当我尝试将它赋值给variablesx = os.system("whoami")它将x的值设置为0。为什么? (:

在Python中更改用户

我正在写一个简单的脚本,重新启动一个hadoop奴隶。 在脚本中,我必须以root用户身份进行一些初始更改。 之后,我必须更改为用户“hadoop”并执行一组命令。 我使用os.system来运行命令,但我怀疑它是否工作正常。 例如: uid=pwd.getpwnam('hadoop')[2] os.setuid(uid) os.system('whoami') os.chdir('/home/hadoop/hadoop/') os.system('bin/hadoop-daemon.sh stop tasktracker') 再次,我必须以root身份执行一些命令,并再次成为用户“hadoop”并执行: os.system('bin/hadoop-daemon.sh stop tasktracker') 我在这里有三个问题, os.system是我可以用来发行linux命令的最好命令吗? 我可以通过上面的命令从root用户更改为用户hadoop,但我无法更改为root用户(我可以理解,如果他们允许这样做会有安全问题,我想知道是否有任何可能做到这一点,至less通过传递密码)? os.setuid()是否工作? whoami打印用户hadoop但进程“tasktracker”不停止使用这些命令,但如果我手动执行相同的命令,它工作正常(手动尝试出来时,我使用“su hadoop”而不是setuid)。 感谢你的帮助。 Sethu

Python代码通过命令行发送命令

final="cacls " + "E:/" + "\"" + list1[2] + " " + list1[3] + "\"" + " /p " + str os.system(final) 我试图设置权限到一个文件夹使用Python,但在运行此命令时,用户input也需要提供,即 它会询问你是否(Y / N),用户需要input“Y”或“N” 有没有办法使用python发送用户input“Y”以及上面的代码? pro = subprocess.Popen(final,shell=True, stdin=subprocess.PIPE) pro.communicate(bytes("Y\r\n",'utf-8')) 我已经添加了下面的代码。 该程序退出而不设置权限。 http://jimmyg.org/blog/2009/working-with-python-subprocess.html#writing-to-standard-input

如何处理需要交互式响应的可执行文件?

我有一个名为tsfoil2.exe的可执行文件,我想从我的python环境中运行这个.exe文件。 我正在运行Python 2.7.3,在Windows 7上运行Spyder 2.1.11。 为了运行.exe,它需要一些input,默认硬盘驱动器('I:\'),输出文件的名称('test')以及input文件的名称('SC20610.inp') 。 我的一位同事build议我使用os.system,并提供一个包含所有参数的临时input文件。 f = open('temp', 'w') f.write('I:\ \n') f.write('test \n') f.write('SC20610.inp\n') f.close() 然后,我以下面的方式将这个文件的参数提供给.exe: os.system("tsfoil2.exe < temp") 这一切工作,但程序需要一个“ENTER”closures。 由于某种原因,.exe被反复询问'按ENTER键退出'。 即使在我的Spyder控制台中按下回车键,程序也不会终止。 有没有办法让“ENTER”键作为交互式input到.exe? 我试图使用SendKeys类,但是因为程序不终止,所以它没有到达包含SendKeys命令的代码行。 我也试图将它包含在参数文件中,但是这也不起作用。 此外,我还发现切换到subprocess命令可能是有益的,因为它可能会给我更多的执行命令,但是我还没有能够使用input文件运行可执行文件。 是否可以使用os.system提供必要的“确认”,或者我应该切换到subprocess,如果是这样,我怎样才能构build一个类似于os.system(“tsfoil2.exe <temp”)的方法现在使用。 我试过这个: import subprocess as sub f = open('temp', 'w') f.write('I:\ \n') f.write('test \n') f.write('SC20610.inp\n') f.close() proc=sub.Popen(["tsfoil2.exe","temp"], shell=True) 和这个 import subprocess as sub p=sub.Popen('tsfoil2.exe') p.communicate(input='I:' […]