Python有一个函数可以用来转义正则表达式中的特殊字符吗?
例如,I'm "stuck" :\应该成为I\'m \"stuck\" :\\.
如何使用Python subprocess模块执行以下shell命令?
echo "input data" | awk -f script.awk | sort > outfile.txt
Run Code Online (Sandbox Code Playgroud)
输入数据将来自一个字符串,所以我实际上并不需要echo.我已经走到这一步了,任何人都可以解释我是如何通过它来解决的sort吗?
p_awk = subprocess.Popen(["awk","-f","script.awk"],
stdin=subprocess.PIPE,
stdout=file("outfile.txt", "w"))
p_awk.communicate( "input data" )
Run Code Online (Sandbox Code Playgroud)
更新:请注意,虽然下面接受的答案实际上没有回答问题,但我相信S.Lott是对的,最好避免首先解决这个问题!
Python标准库中是否有任何内容可以正确解析/解析字符串以便在shell命令中使用?我正在寻找perl的python模拟String::ShellQuote::shell_quote:
$ print String::ShellQuote::shell_quote("hello", "stack", "overflow's", "quite", "cool")
hello stack 'overflow'\''s' quite cool
Run Code Online (Sandbox Code Playgroud)
而且,更重要的是,它会在相反的方向上起作用(取一个字符串并将其分解为一个列表).
有时候我会自动从Python创建小的shell脚本,我想确保文件名参数不包含非转义的特殊字符.我已经推出了自己的解决方案,我将作为答案提供,但我几乎可以肯定,我已经看到这样的功能在标准库中丢失了."丢失"我的意思是我没有在一个明显的模块中找到它shlex,cmd或者subprocess.
你知道stdlib中有这样的功能吗?如果是的话,它在哪里?
即使是负面(但明确和正确)的答案也将被接受.
from django.db import models
import os
from django.db.models.signals import post_save
import sys
class Form(models.Model):
site = models.CharField(max_length=50)
num = models.CharField(max_length=10)
octet = models.CharField(max_length=30)
def __unicode__(self):
return self.site
return self.num
return self.octet
def create_conf(sender, **kwargs):
os.system("/usr/local/build " + self.site + ' ' + self.num + ' ' + self.octet)
post_save.connect(create_conf, sender=Form)
Run Code Online (Sandbox Code Playgroud)
试图让我的django Web应用程序执行带参数的python命令行应用程序.不确定这是否是绕过它的最好方法?如果没有任何建议会很好.尝试通过Web表单从用户获取输入,并将其用作执行cmd应用程序的参数.
帮助太棒了
谢谢威廉
我有兴趣在Python3.x中转义字符串,例如:
SOME_MACRO(a, b)
Run Code Online (Sandbox Code Playgroud)
成...
SOME_MACRO\(a,\ b\)
Run Code Online (Sandbox Code Playgroud)
...这样它就可以作为定义传递给程序(在本例中不是gcc),
例如,
some_program -DSOME_MACRO\(a,\ b\)="some expression"
Run Code Online (Sandbox Code Playgroud)
我希望shlex有这个功能,但我没有找到如何做到这一点并检查了许多类似的问题.
我不介意写一些简单的函数来做到这一点,但这似乎是Python所包含的东西.
注意: 程序我传递的参数不会接受:
-D"SOME_MACRO(a, b)"="some expression"
Run Code Online (Sandbox Code Playgroud)
...它希望第一个字符是标识符.
我想统计一下我写了多少行代码。
这是Python代码:
import os
import sys
EXT = ['.c','.cpp','.java','.py']
def main():
l = []
if os.path.isdir(sys.argv[1]):
for root, dirs, files in os.walk(sys.argv[1]):
l.extend([os.path.join(root, name) for name in files])
else:
l.append(sys.argv[1])
params = ["'"+p+"'" for p in l if os.path.splitext(p)[1] in EXT]
result = os.popen("wc -l %s "%" ".join(params)).read()
print result
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud)
在此之前,它按预期运行。但今天,它给了我这个错误:
sh: 1: Syntax error: Unterminated quoted string
Run Code Online (Sandbox Code Playgroud)
我不知道发生了什么事。
我已经开始在 python 中使用 pytesseract。当我将它传递给单引号或双引号时
from PIL import Image
import pytesseract
import numpy as np
tesseract_config = r"""-c tessedit_char_whitelist=0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ#'<>(){};:"""
tesseract_language = "eng"
text = pytesseract.image_to_string(Image.open('res/outc001.jpg'), lang=tesseract_language, config=tesseract_config)
print text
Run Code Online (Sandbox Code Playgroud)
它返回
Traceback (most recent call last):
File "main.py", line 15, in <module>
text = pytesseract.image_to_string(Image.open('res/outc001.jpg'), lang=tesseract_language, config=tesseract_config).split('\n')
File "/usr/local/lib/python2.7/dist-packages/pytesseract/pytesseract.py", line 193, in image_to_string
return run_and_get_output(image, 'txt', lang, config, nice)
File "/usr/local/lib/python2.7/dist-packages/pytesseract/pytesseract.py", line 140, in run_and_get_output
run_tesseract(**kwargs)
File "/usr/local/lib/python2.7/dist-packages/pytesseract/pytesseract.py", line 106, in run_tesseract
command += shlex.split(config)
File "/usr/lib/python2.7/shlex.py", line 279, in split
return …Run Code Online (Sandbox Code Playgroud)