繁体   English   中英

将字符串作为参数传递给python脚本

[英]Passing a string as an argument to a python script

我想将ZPL代码的字符串从一个python脚本传递到另一个python脚本。 在第二个脚本中使用时,字符串格式错误。 如何将字符串文字作为参数传递给另一个python脚本而又不会格式错误?

原始字符串

^XA^FO20,20^BQ,2,3^FDQA,001D4B02107A;1001000;49681207^FS^FO50,50^ADN,36,20^FDMAC: 001D4B02107A^FS^FO50,150^ADN,36,20^FDSN: 1001000^FS^FO50,250^ADN,36,20^FDCode: 49681207^FS^XZ

字符串格式错误

XAFO20,20BQ,2,3FDQA,001D4B02107A;1001000;49681207FSFO50,50ADN,36,20FDMAC:

我调用第二个脚本的代码

def printLabel():
    label = "^XA"+"^FO20,20^BQ,2,3^FDQA,"+"001D4B02107A;1001000;49681207"+"^FS"+"^FO50,50"+"^ADN,36,20"+"^FD"+"MAC: "+"001D4B02107A"+"^FS"+"^FO50,150"+"^ADN,36,20"+"^FD"+"SN: "+"1001000"+"^FS"+"^FO50,250"+"^ADN,36,20"+"^FD" + "Code: "+"49681207"+"^FS"+"^XZ"
    command = "zt320print.py "+label
    print command
    sys.stdout.flush()
    exitCode = os.system(str(command))

接收参数的代码

if __name__ == "__main__":
    zplString = str(sys.argv[1])
    print zplString
    printZPL(zplString)

如果需要编写只是因为它是(包括通过外壳的中间串在一起的ZPL代码,并要求独立的脚本,而奇怪的方式,并避免你的代码subprocess ,对于这个问题),你可以解决你的问题进行一些小的调整:

首先,将您的代码字符串用双引号引起来。

label= '"^XA'+"^FO20,20^BQ,2,3^FDQA,"+"001D4B02107A;1001000;49681207"+"^FS"+"^FO50,50"+"^ADN,36,20"+"^FD"+"MAC: "+"001D4B02107A"+"^FS"+"^FO50,150"+"^ADN,36,20"+"^FD"+"SN: "+"1001000"+"^FS"+"^FO50,250"+"^ADN,36,20"+"^FD" + "Code: "+"49681207"+"^FS"+'^XZ"'

其次,确保您实际上是从shell调用python的:

command = "python script2.py "+label

最后,如果你关心的特殊字符没有在命令行中读取正确,用unicode_escapecodecs.decode以确保正确传输。
有关unicode_escape更多信息, unicode_escape 答案

# contents of second script
if __name__ == "__main__":
    from codecs import decode
    import sys
    zplString = decode(sys.argv[1], 'unicode_escape')
    print(zplString)

现在,第一个脚本的调用将正确传输代码:

import sys
import os

sys.stdout.flush()
exitCode = os.system(str(command))

输出:

^XA^FO20,20^BQ,2,3^FDQA,001D4B02107A;1001000;49681207^FS^FO50,50^ADN,36,20^FDMAC: 001D4B02107A^FS^FO50,150^ADN,36,20^FDSN: 1001000^FS^FO50,250^ADN,36,20^FDCode: 49681207^FS^XZ

一些演示代码:

import sys

if __name__ == "__main__":
    for i, arg in enumerate(sys.argv):
        print("{}: '{}'".format(i, arg))

当被称为

python test.py ^this^is^a^test

它给

0: 'test.py'
1: 'thisisatest'

当被称为

python test.py "^this^is^a^test"

它给

0: 'test.py'
1: '^this^is^a^test'

解决方案:将参数字符串用双引号引起来,即

label = '"' + label + '"'

您可以将字符串放在双引号中,或者仅导入其他python脚本:

a.py

import sys, os

text = "a b c d"

# or '{} {} "{}"'.format("python", "b.py", text)
command = "python b.py \"" + text + "\"" 
os.system(str(command))

b.py

import sys

if __name__ == "__main__":

    first_argument = str(sys.argv[1])
    print(first_argument)

产量

abcd

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM