在字符串中调用python参数

时间:2014-09-17 01:11:49

标签: python string

我想在string中调用python参数。那可能吗? 假设我已将变量mypath声明为

mypath = os.path.abspath('1.jpg')

我需要在另一个变量中调用它,如下面的字符串

cmd0 = 'gimp-console-2.8 -b -idf --batch-interpreter python-fu-eval -b "import sys,os;sys.path=[\'.\']+sys.path;import mycode;'
cmd1 = 'mycode.doit('THIS VARIABLE MYPATH SHOULD GO HERE')"'
cmd2 = '-b "pdb.gimp_quit(0)"'
cmdfinal = cmd0 + cmd1 + cmd2
os.system(cmdfinal)

2 个答案:

答案 0 :(得分:1)

看起来你想要做的是将一个变量插入到字符串的中间。

这是通过字符串格式化完成的。 Python有几种不同的方法,但最简单的是str.format方法,如教程部分Fancier Output Formatting中所述:

cmd1 = 'mycode.doit({0})'.format(mypath)

如果mypath是字符串/Users/me/Documents/1.jpg,则cmd1将是字符串mycode.doit(/Users/me/Documents/1.jpg)

但这并不完全正确,因为您正在尝试格式化可以由另一个Python解释器运行的命令。因此,您不仅需要字符串的内容,还需要字符串的Python文字。你是怎么做到的?

字符串的repr是引号中的字符串,具有正确的转义以确保它可以直接在Python代码中使用。 (对于所有对象都不是这样;例如,有些会返回<Spam object at 0x12345678>之类的东西,这并不是特别有用;它通常只适用于输入输入的对象Python代码是有意义的,并为您提供完全等效的对象。)

那么,你怎么做到的?如Format String Syntax中所述,您使用r转换说明符:

cmd1 = 'mycode.doit({0!r})'.format(mypath)

现在,cmd将是字符串mycode.doit('/Users/me/Documents/1.jpg')

这正是你想要的。

答案 1 :(得分:1)

你确实使用了一个元组

mypath = os.path.abspath('1.jpg')
cmd = 'gimp-console-2.8 -b -idf --batch-interpreter python-fu-eval -b "import sys,os;sys.path=[\'.\']+sys.path;import mycode;mycode.doit(\'%s\')" -b "pdb.gimp_quit(0)"' % (mypath)
os.system(cmd)

或使用格式字符串

mypath = os.path.abspath('1.jpg')
cmd = 'gimp-console-2.8 -b -idf --batch-interpreter python-fu-eval -b "import sys,os;sys.path=[\'.\']+sys.path;import mycode;mycode.doit(\'{0}\') -b "pdb.gimp_quit(0)"'.format(mypath)
os.system(cmd)