shell = True
'u kullandığınızda, subprocess.Popen
ilk bağımsız değişkeni olarak bir dize bekler. security risk (see the Warning olabilir, bu yardımcı olabilir shell = True
kullanmamak daha iyidir.
shell = True
ya da shell = False
kullanın, subprocess.Popen
, bağımsız değişkenlerin bir listesini bekler. shlex.split
:
import shlex
import subprocess
def filter_history(old, new, name, repoPath):
"""Change author info
"""
# http://help.github.com/change-author-info/
# http://stackoverflow.com/a/3880493/190597
command = """git filter-branch -f --env-filter '
an="$GIT_AUTHOR_NAME"
am="$GIT_AUTHOR_EMAIL"
cn="$GIT_COMMITTER_NAME"
cm="$GIT_COMMITTER_EMAIL"
if [[ "$GIT_COMMITTER_NAME" = "{old}" ]]
then
cn="{name}"
cm="{new}"
fi
if [[ "$GIT_AUTHOR_NAME" = "{old}" ]]
then
an="{name}"
am="{new}"
fi
export GIT_AUTHOR_NAME="$an"
export GIT_AUTHOR_EMAIL="$am"
export GIT_COMMITTER_NAME="$cn"
export GIT_COMMITTER_EMAIL="$cm"
'
""".format(old = old, new = new, name = name)
process = subprocess.Popen(
shlex.split(command),
cwd = os.path.dirname(repoPath))
process.communicate()
kullanarak bir dizgeden bağımsız değişkenler listesi oluşturabilirsiniz.