我想在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)
答案 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)