Linux 명령 줄 호출이 os.system에서해야하는 것을 반환하지 않습니까?
나는 리눅스에 몇 가지 명령 줄 호출을하고 이것에서 반환을 얻어야한다. 그러나 아래와 같이 0
하는 것은 시간 값을 반환해야 할 때를 반환하는 것이다. 예를 들어 00:08:19
, 나는 정규 명령 줄에서 똑같은 호출을 테스트하고 있으며 시간 가치 00:08:19
그래서 나는 이것이 파이썬에서 그것을하는 방법이라고 생각했기 때문에 내가 뭘 잘못하고 있는지 혼란 스럽습니다.
import os
retvalue = os.system("ps -p 2993 -o time --no-headers")
print retvalue
반환되는 것은이 명령을 실행 한 반환 값입니다. 직접 실행하는 동안 표시되는 것은 stdout의 명령 출력입니다. 0이 반환된다는 것은 실행에 오류가 없음을 의미합니다.
출력을 캡처하려면 popen 등을 사용하십시오.
이 라인을 따라 몇 가지 :
import subprocess as sub
p = sub.Popen(['your command', 'arg1', 'arg2', ...],stdout=sub.PIPE,stderr=sub.PIPE)
output, errors = p.communicate()
print output
또는
import os
p = os.popen('command',"r")
while 1:
line = p.readline()
if not line: break
print line
ON SO : Popen과 파이썬
프로세스의 출력에만 관심이 있다면 하위 프로세스의 check_output 함수 를 사용하는 것이 가장 쉽습니다 .
output = subprocess.check_output(["command", "arg1", "arg2"]);
그런 다음 출력은 프로그램 출력을 표준 출력으로 유지합니다. 자세한 내용은 위의 링크를 확인하십시오.
가장 간단한 방법은 다음과 같습니다.
import os
retvalue = os.popen("ps -p 2993 -o time --no-headers").readlines()
print retvalue
이것은 목록으로 반환됩니다
0
전달 된 명령 실행이 성공하면 코드가 반환 되고 실패하면 0이 아닙니다. 다음 프로그램은 python2.7에서 작동하며 3 및 위 버전을 확인했습니다. 이 코드를 사용해보십시오.
>>> import commands
>>> ret = commands.getoutput("ps -p 2993 -o time --no-headers")
>>> print ret
예, 반 직관적이고 비단뱀처럼 보이지는 않지만 실제로는 C POSIX 함수가 호출되는 유닉스 API 디자인을 모방합니다. 확인 man 3 popen
&&man 3 system
내가 사용하는 os.system 을 대체하는 다소 편리한 스 니펫 :
from subprocess import (PIPE, Popen)
def invoke(command):
'''
Invoke command as a new system process and return its output.
'''
return Popen(command, stdout=PIPE, shell=True).stdout.read()
result = invoke('echo Hi, bash!')
# Result contains standard output (as you expected it in the first place).
IonicBurger에 "평판 50"이 없어서 댓글을 달 수 없어서 새 항목을 추가하겠습니다. 죄송합니다. os.popen () 은 여러 / 복잡한 명령 (내 의견)에 가장 적합하며 다음과 같은 더 복잡한 여러 명령과 같이 stdout을 얻는 것 외에도 반환 값을 얻는 데 적합합니다.
import os
out = [ i.strip() for i in os.popen(r"ls *.py | grep -i '.*file' 2>/dev/null; echo $? ").readlines()]
print " stdout: ", out[:-1]
print "returnValue: ", out[-1]
이름에 'file' 이라는 단어가있는 모든 파이썬 파일이 나열됩니다 . 는 [...] 의 각 항목에서 개행 문자를 제거 (스트립)하는 지능형리스트이다. 에코 $? 이 예제에서 grep 명령과 목록의 마지막 항목이 될 마지막으로 실행 된 명령의 반환 상태를 표시하는 셸 명령입니다. 2>는 / dev / null가 인쇄 말한다 표준 에러 의 그렙 명령을 을 / dev / null 가 출력에 표시되지 않도록. 'ls' 명령 앞 의 'r' 은 원시 문자열을 사용하므로 쉘이 '*' 와 같은 메타 문자를 해석하지 않습니다. incorrectly. This works in python 2.7. Here is the sample output:
stdout: ['fileFilter.py', 'fileProcess.py', 'file_access..py', 'myfile.py']
returnValue: 0
This is an old thread, but purely using os.system
, the following's a valid way of accessing the data returned by the ps
call. Note: it does use a pipe to write the data to a file on disk. And OP didn't specifically ask for a solution using os.system
.
>>> os.system("ps > ~/Documents/ps.txt")
0 #system call is processed.
>>> os.system("cat ~/Documents/ps.txt")
PID TTY TIME CMD
9927 pts/0 00:00:00 bash
10063 pts/0 00:00:00 python
12654 pts/0 00:00:00 sh
12655 pts/0 00:00:00 ps
0
accordingly,
>>> os.system("ps -p 10063 -o time --no-headers > ~/Documents/ps.txt")
0
>>> os.system("cat ~/Documents/ps.txt")
00:00:00
0
No idea why they are all returning zeroes though.
For your requirement, Popen function of subprocess python module is the answer. For example,
import subprocess
..
process = subprocess.Popen("ps -p 2993 -o time --no-headers", stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
print stdout
okey I believe the fastest way it would be
import os
print(os.popen('command').readline())
x = _
print(x)
using commands module
import commands
"""
Get high load process details
"""
result = commands.getoutput("ps aux | sort -nrk 3,3 | head -n 1")
print result -- python 2x
print (result) -- python 3x
'Program Tip' 카테고리의 다른 글
Linux 명령 줄을 사용하여 HTML 이메일을 보내는 방법 (0) | 2020.12.10 |
---|---|
iPhone 앱에서 UIButton / UILabel '패딩'을 달성하는 방법 (0) | 2020.12.10 |
Mac OS X에서 쉘 스크립트를 통해 무선 SSID 가져 오기 (0) | 2020.12.10 |
git 로그를 텍스트 파일로 내보내려면 어떻게해야합니까? (0) | 2020.12.10 |
MongoDB C # 드라이버-바인딩시 필드 무시 (0) | 2020.12.10 |