Как я могу использовать строку внутри pexpect spawn, когда строка, которую мне нужно отправить, содержит 'и' несколько раз? - PullRequest
0 голосов
/ 08 апреля 2019

Мне нужно передать сложную строку в pexpect.spawn примерно так:

shell_cmd = '/mnt/ssd-primary/go/bin/grpcurl -plaintext -d \'{"byHash": {"blkHash": "' + blockHash + '"}}\' localhost:14014 iotexapi.APIService.GetBlockMetas | grep "numActions"'

numActions = pexpect.spawn('/bin/bash', ['-c', shell_cmd])

Это не работает, потому что кажется, что pexpect получает \ и отправляет его с командной строкой, а не \, фактически работающей в качестве escape-символа для '.

Для борьбы с этим я пробовал строковые литералы с тройными кавычками, подобные этому """ """, но, похоже, это автоматически добавляет escape-символы во время выполнения, и поэтому escape-символы снова передаются в pexpect, который портит команду.

Чтобы бороться с этим, я попытался разделить всю команду на маленькие кусочки, чтобы передать их в аргумент массива spawn, но я не понимаю, как это возможно из-за отсутствия пробела между символами ' в строке. Может я не прав

Есть ли какой-нибудь другой метод, который я могу использовать, чтобы сделать эту работу?

...