LoginSignup
5
3

More than 5 years have passed since last update.

Python3 シェル呼び出しの最大文字数 (OS毎)

Last updated at Posted at 2017-07-03

シェルスクリプトで書かれたプログラムをPythonで置き換える際に一部シェルコマンドをPythonから呼び出す必要があったのですが、シェル呼び出しにはOS毎に異なる文字数制限があるようなので調査を行いました。

調査対象のコマンド

  • os.system()
  • subprocess.run(shell=True)

調査対象のOS

  • OSX Sierra
  • Windows 7
  • Ubuntu 16
  • CentOS 7

調査に使用したスクリプト

os.system()

import os
i = 100000000
n = 0
while True:
    n += i
    arg = 'b' * n
    command = 'echo "{arg}"'.format(arg=arg)
    result = os.system(command)
    if result != 0:
        if i == 1:
            break
        n -= i
        i //= 10
print("LENGTH: ", n -1 + 7) # echo、カンマ、スペースの分を足す

subprocess.run(shell=True)

import subprocess
i = 100000000
n = 0
while True:
    try:
        n += i
        arg = 'b' * n
        command = 'echo "{arg}"'.format(arg=arg)
        subprocess.run(command,shell=True)
    except OSError:
        if i == 1:
            break
        n -= i
        i //= 10
print("LENGTH: ", n -1 + 7) # echo、カンマ、スペースの分を足す

調査結果

OSX sierra (Python3.6.1)

Python3はhttps://www.python.org/ からダウンロードした物

コマンド os.system subprocess.run
最大文字数 260554字 260549字

Windows7 (Python3.6.1)

Python3はhttps://www.python.org/ からダウンロードした物

コマンド os.system subprocess.run
最大文字数 8160字 32733字

Ubuntu16.04 (Python3.5.2)

Python3は標準のリポジトリに入っているもの

コマンド os.system subprocess.run
最大文字数 131071字 131071字

CentOS7 (Python3.6.1)

Python3はIUS communityのリポジトリからインストールした物

コマンド os.system subprocess.run
最大文字数 131071字 131071字

subprocess.run(shell=False)の場合

shell=Falseのパターンも検証を行ったのですが、上手く調査できているか心配だったので上記に記載しませんでした。
第一引数に文字を詰めまくる調査を行った所
* Linux系はshell=Falseの場合とほぼ変わらない
* OSXで521342字程度
* Windowsではメモリーエラー
という結果になりました。

5
3
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
5
3