ターミナルでlsを行ったときと同様の結果が得られる
「LS」です。今、何がディレクトリの中にあるかを見ます。
これで、ファイルとディレクトリを表示することができます
qiita.py
import subprocess
subprocess.run(['ls'])
ls -alを行いたい場合
書き方が二通りある
2つ目の方法は shellに渡して行う方法
セキュリティ的に問題がある為、好まれない
例えばrmが組み込まれファイルが消されるなど
qiita.py
import subprocess
#1つ目
subprocess.run(['ls','-al'])
#2つ目
subprocess.run('ls -al', shell=True)
###exception
returncodeを用いた方法
returncode
子プロセスの終了コード。一般に、終了ステータス 0 はプロセスが正常に終了したことを示します。
負の値 -N は子プロセスがシグナル N により中止させられたことを示します (POSIX のみ)。
存在しないコマンドを渡した場合
qiita.py
import subprocess
r = subprocess.run('lsa',shell=True)
print(r.returncode)
実行結果
lsaという存在しないコマンドを実行=127
127
/bin/sh: lsa: command not found
checkを用いることもできる
qiita.py
import subprocess
r = subprocess.run('lsa',shell=True, check=True)
実行結果
エラー発生
/bin/sh: lsa: command not found
Traceback (most recent call last):
File "/Users/kirinboy96/PycharmProjects/untitled1/lesson_package/NEW1.py", line 6, in <module>
r = subprocess.run('lsa',shell=True, check=True)
File "/opt/anaconda3/lib/python3.7/subprocess.py", line 512, in run
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command 'lsa' returned non-zero exit status 127.
###PIPE
stdout(出力)をsubprocess.PIPEにわたす
p2.communicate()[0]は出力
p2.communicate()[1]はエラーが返ってくる
qiita.py
import subprocess
p1 = subprocess.Popen(['ls', '-al'], stdout=subprocess.PIPE)
p2 = subprocess.Popen(
['grep', 'test'], stdin=p1.stdout,stdout=subprocess.PIPE
)
p1.stdout.close()
output = p2.communicate()[0]
print(output)
実行結果
b'-rw-r--r-- 1 kirinboy96 staff 22 Aug 18 00:44 test.csv\n-rw-r--r-- 1 kirinboy96 staff 216 Aug 18 14:20 test.tar.gz\n-rw-r--r-- 1 kirinboy96 staff 763 Aug 18 14:52 test.zip\ndrwxr-xr-x 4 kirinboy96 staff 128 Aug 18 02:52 test_dir\ndrwxr-xr-x 3 kirinboy96 staff 96 Aug 18 14:20 test_tar\n'