Нет необходимости в подпроцессе, соблюдайте:
>>> import base64
>>> r = open("/dev/urandom","r")
>>> base64.encodestring(r.read(22))[:30]
'3Ttlx6TT3siM8h+zKm+Q6lH1k+dTcg'
>>> r.close()
Кроме того, strings
ввод, а затем grep
извлечение буквенно-цифровых символов из /dev/urandom
является чрезвычайно неэффективным и тратит много случайности. На моем настольном ПК приведенный выше питон выполняется менее чем за 10 мс из bash, ваш strings ...
oneliner занимает 300-400 ...
Для чисто Python-решения, которое работает также в системах без /dev/urandom
- и дает только буквенно-цифровые символы (если вы действительно не хотите + или /):
import string
import random
''.join([random.choice(string.printable[:62]) for i in range(30)])