4

なぜこれを行っているのかわからず、トリミングしようとするとエラーが発生します。

>>> print os.system('uptime')
21:05  up  9:40, 2 users, load averages: 0.69 0.76 0.82
0
>>> print os.system('uptime')[:-2]
21:07  up  9:42, 2 users, load averages: 0.75 0.74 0.80
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not subscriptable

これが起こらないようにする方法、またはエラーなしで削除する方法を知っている人はいますか? ありがとう!

4

4 に答える 4

6

os.systemそのようなことはしていません。何が起こっているのかというと、uptimeそれ自体がstdout(Pythonではなく実際のstdout)に書き込みを行ってsys.stdoutおりos.system、戻り値uptime0(正常に終了したことを示す)を返しています。

uptimePython内で文字列printstostdoutにアクセスする場合は、など、他の方法で呼び出す必要がありますsubprocess.Popen

>>> import subprocess
>>> uptime = subprocess.Popen('uptime', stdout=subprocess.PIPE)
>>> output = uptime.stdout.read()
>>> output
' 04:20:09 up 12:13,  5 users,  load average: 0.99, 1.15, 1.25\n'

詳細については、subprocessドキュメントを参照してください。

于 2013-02-19T03:21:47.150 に答える
3

os.system()最初にサブシェルでコマンドを実行します。そのサブシェルは、表示される最初の行を印刷します。

Unixでは、戻り値はプロセスの終了ステータスです。それは0あなたが通訳で見るものです。これを変数に割り当てることで、これを抑制することができます。

>>> x = os.system('uptime')
14:12  up 21:45, 4 users, load averages: 1.13 0.93 0.82
>>> 

または、:を使用しsubprocess.call()ます

>>> import subprocess
>>> status = subprocess.call('uptime')
14:19  up 21:52, 4 users, load averages: 1.12 0.93 0.86
>>> print status
0

おそらく、出力と返されたステータスの両方を変数にキャプチャして、表示する前にこれらを操作できるようにする(または表示しない)ことができます。

>>> pipe = subprocess.Popen(['uptime'], stdout=subprocess.PIPE, shell=True)
>>> 
>>> for line in pipe.stdout:
...     print line
... 
14:36  up 22:10, 4 users, load averages: 0.59 0.59 0.65

>>> status = pipe.wait()
>>> 
>>> print status
0
于 2013-02-19T03:16:34.933 に答える
2

os.systemstdoutの内容を返しません。それらの使用をキャプチャしたい場合os.popen("uptime").read()

于 2013-02-19T03:11:54.240 に答える
0

出力を印刷する必要はありません。

os.systemによって呼び出された実際のコマンドはstdoutに出力され、関数os.system()はコマンドの戻り値を整数として返します。

だから試してみてください

os.system('uptime')
于 2013-02-19T03:14:22.903 に答える