1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

subprocessでのコマンド実行

Last updated at Posted at 2020-08-25

ターミナルで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

https://qiita.com/Linda_pp/items/1104d2d9a263b60e104b

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'

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?