小编Add*_*son的帖子

如何使用带引号的逗号分隔逗号分隔的键值对

我知道有许多关于解析逗号分隔值的其他帖子,但我找不到分割键值对并处理引用逗号的帖子.

我有这样的字符串:

age=12,name=bob,hobbies="games,reading",phrase="I'm cool!"
Run Code Online (Sandbox Code Playgroud)

我希望得到这个:

{
  'age': '12',
  'name': 'bob',
  'hobbies': 'games,reading',
  'phrase': "I'm cool!",
}
Run Code Online (Sandbox Code Playgroud)

我尝试使用shlex这样的:

lexer = shlex.shlex('''age=12,name=bob,hobbies="games,reading",phrase="I'm cool!"''')
lexer.whitespace_split = True
lexer.whitespace = ','
props = dict(pair.split('=', 1) for pair in lexer)
Run Code Online (Sandbox Code Playgroud)

麻烦的是shlexhobbies条目分成两个标记,即hobbies="gamesreading".有没有办法让双引号考虑在内?或者我可以使用另一个模块吗?

编辑:修正了拼写错误 whitespace_split

编辑2:我不喜欢使用shlex.正则表达式也很好,但我不知道如何处理匹配的引号.

python parsing

6
推荐指数
2
解决办法
3838
查看次数

linux命令行的顺序FIFO队列

我正在尝试找到或实现一个简单的解决方案,可以按顺序排队Linux shell命令,以便一次执行一个.以下是标准:

  1. 队列必须一次执行一个命令,即不能同时运行两个命令.
  2. 我没有提前命令列表.他们将从我的Web服务器收到的Web请求进入.这意味着队列可能很长时间是空的,并且10个请求可以同时进入.
  3. 我的Web服务器只能对shell进行系统调用,因此需要从命令行调用此程序/解决方案.
  4. 我只有一台机器,所以它不能也不需要将工作分配给多台机器.

最初我认为at命令可以做我想要的,但唯一的事情是它不会按顺序执行命令.

我正在考虑使用以下部分在python中实现我自己的解决方案:

  1. 有一个带锁文件的专用目录
  2. 排队的命令存储为单个文件,文件名包含递增序列ID或时间戳或类似的东西,我称之为"命令文件"
  3. 使用fcntl锁定文件上的模块编写python脚本,以确保只运行1个脚本实例
  4. 该脚本将监视任何文件的目录,并按文件名的顺序在文件中执行shell命令
  5. 当目录没有"命令文件"时,脚本将解锁锁定文件并退出
  6. 当我的Web服务器想要将作业排队时,它将添加一个新的"命令文件"并调用我的python脚本
  7. python脚本将检查自身的另一个实例是否正在运行.如果是,则退出,这将使另一个实例处理新排队的"命令文件".如果不是,则锁定锁定文件并按顺序开始执行"命令文件"

听起来这听起来有用吗?我不知道如何处理的唯一竞争条件是当脚本的第一个实例检查目录并看到它是空的时,在解锁锁定文件之前,新命令排队并调用脚本的新实例.当新脚本看到文件被锁定时,它将退出.然后原始脚本将解锁文件并退出.

有什么东西已经做到了,所以我不必自己实现吗?

linux queue sequential

0
推荐指数
1
解决办法
4717
查看次数

标签 统计

linux ×1

parsing ×1

python ×1

queue ×1

sequential ×1