#python #python-3.x #bash #subprocess #dd
#python #python-3.x #bash #подпроцесс #dd
Вопрос:
Я пытаюсь запустить dd
скрипт на Python с помощью subprocess.run()
. Если я выполняю следующую команду из своего терминала, она работает нормально:
dd if=/dev/zero of=~/file.txt bs=512 count=1000 oflag=dsync
Примечание: ~/file.txt
did не существует до команды, но создается автоматически.
Теперь, если я запускаю свой python3
и делаю
cmd='dd if=/dev/zero of=~/file.txt bs=512 count=1000 oflag=dsync'
import subprocess
ReturnVariable = subprocess.run(cmd, shell=True)
Я получаю
dd: failed to open '~/file.txt': No such file or directory
Это происходит как в том случае, если ~/file.txt
существует, так и в том случае, если его нет. В любом случае это не имеет особого смысла, поскольку это выходной файл, а не входной файл.
Что я делаю не так? Почему одна и та же команда на том же компьютере не работает, если я вызываю ее через subprocess.run()
?
Комментарии:
1. Это не расширяет имя каталога
~
в ваш домашний каталог.2. ^ … и вы можете использовать
os.path.expanduser
для этого.3. @wim как именно я могу отредактировать свой exampel, чтобы сделать это?
Ответ №1:
subprocess.run()
используется /bin/sh
в качестве оболочки, что, вероятно, не совпадает с вашей интерактивной оболочкой (вероятно bash
).
sh
~/
заменяет ваш домашний каталог только тогда, когда он находится в начале слова. bash
также расширяет его после =
и :
. So of=~/file
расширяется в bash
, но нет sh
, поэтому он не расширяется при использовании subprocess.run()
.
Вы можете просто использовать переменную среды напрямую вместо тильды.
cmd='dd if=/dev/zero of=$HOME/file.txt bs=512 count=1000 oflag=dsync'