Подстановочный знак не работает в вызове подпроцесса с использованием shlex

Язык: Python v2.6.2

ОС: AIX 5.3

Я использую Python для восстановления некоторых файлов из резервной копии в тестовую систему - все команды вызываются следующим образом, однако некоторые просто не хотят работать.

#!/usr/bin/python
import subprocess, shlex

cmd = 'sudo rm -rf /work/TEST/*'
arg = shlex.split(cmd)

# This does not work
p = subprocess.Popen(arg)

# This, however, works just fine
p = subprocess.Popen(cmd, shell=True)

Если я удалю * из команд, они будут работать нормально (ну, они работают, как должны, без подстановочных знаков, что, к сожалению, не то, что я хочу).

Я действительно не хочу использовать shell = True по очевидным причинам безопасности, однако есть пара других команд, которые в основном делают то же самое. Если в команде есть подстановочный знак, он просто не сработает - он выполняется без ошибок, просто ничего не делает.

Интересно, что следующая команда (проанализированная с помощью shlex):

sudo mv /work/testrestore/production/* /work/TESTC

Выдает следующее:

mv: 0653-401 Невозможно переименовать / work / testrestore / production / * в / work / TESTC / *: файл или каталог в указанном пути не существует.

Это как если бы unix теперь пытается переместить файл с именем * вместо использования * в качестве подстановочного знака. Это типичное поведение shlex?

Редактировать: Я пытался экранировать * с помощью \, также пытался изменить одинарные кавычки на двойные .. не то, чтобы я ожидал, что это что-то сделает.

5
задан Sparc 23 August 2011 в 06:14
поделиться