python调用linux的set参数_从python调用带有变量参数的linux命令

本文档描述了在Python2.x中尝试使用`mpirun`执行命令时遇到的问题,命令需要包含变量参数。在终端中直接运行命令没有问题,但在Python脚本中使用`subprocess.call`调用时出现`OSError: [Errno 2] No such file or directory`错误。问题在于文件路径和变量的正确传递。尽管确认文件存在,但直接使用文件名和使用变量名调用程序都失败了。寻求解决方案来在Python中正确地用变量作为输入和输出调用程序。
摘要由CSDN通过智能技术生成

我正在尝试从python2x执行一个程序

在终端中,作业将运行为:mpirun -np 8 ~/WORK/scf Fe_SCF.inp > Fe_SCF.out

其中Fe_SCF.*是CWD中的输入和输出。在

现在,我尝试从python脚本运行这段代码。从那以后,我将它们定义为变量,并尝试调用为:

^{pr2}$

给出错误:File "./triolith.py", line 38, in

call(["mpirun -np 8 ~/WORK/scf", scfin, scfout])

File "/usr/lib64/python2.7/subprocess.py", line 522, in call

return Popen(*popenargs, **kwargs).wait()

File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__

errread, errwrite)

File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child

raise child_exception

OSError: [Errno 2] No such file or directory

使用真正的文件名也不能解决问题:call(["mpirun -np 8 ~/WORK/scf", "Fe_SCF.inp", "Fe_SCF.out"])

这就产生了错误:File "./triolith.py", line 38, in

call(["mpirun -np 8 ~/WORK/scf", "Fe_SCF.inp", "Fe_SCF.out"])

File "/usr/lib64/python2.7/subprocess.py", line 522, in call

return Popen(*popenargs, **kwargs).wait()

File "/usr/lib64/python2.7/subprocess.py", line 710, in __init__

errread, errwrite)

File "/usr/lib64/python2.7/subprocess.py", line 1335, in _execute_child

raise child_exception

OSError: [Errno 2] No such file or directory

我已经检查并可以确认,使用操作系统正在使用“Real”文件名,但不使用变量名:os.system("mpirun -np 8 ~/WORK/scf scfin" )

那么,使用这两种方法中的任何一种,如何用变量名作为输入和输出调用程序呢?在

要在 MySQL 触发器中调用 Python 脚本,你可以使用以下步骤: 1. 在 MySQL 中创建一个触发器,以便在特定事件发生时触发执行 Python 脚本。 2. 在 Python 中编写脚本,以便执行所需的操作。你可以使用 Python 的 MySQL 连接库(如 PyMySQL)与 MySQL 进行交互。 3. 在触发器中调用 Python 脚本,可以通过 shell 命令调用 Python 解释器来实现。例如,在 Linux 系统上,你可以使用以下命令: ``` `/usr/bin/python /path/to/your/python/script.py` ``` 4. 将该命令作为 MySQL 触发器中的 shell 命令调用即可。 需要注意的是,如果你的 Python 脚本需要接收参数,你需要在触发器中将这些参数传递给 shell 命令。可以使用 MySQL 的 `CONCAT()` 函数将参数拼接成字符串,然后在 shell 命令中解析这个字符串。 示例代码如下: ```mysql CREATE TRIGGER `my_trigger` AFTER INSERT ON `my_table` FOR EACH ROW BEGIN SET @args = CONCAT('arg1', ' ', 'arg2', ' ', NEW.`column`); SET @cmd = CONCAT('/usr/bin/python /path/to/your/python/script.py', ' ', @args); SET @result = sys_exec(@cmd); END; ``` 在这个示例中,我们创建了一个名为 `my_trigger` 的触发器,它会在 `my_table` 表中插入新行后触发。在触发器中,我们使用 `CONCAT()` 函数将三个参数拼接成字符串,并将其存储在变量 `@args` 中。然后,我们使用 `CONCAT()` 函数将 Python 解释器路径和脚本路径与 `@args` 拼接起来,存储在变量 `@cmd` 中。最后,我们调用 MySQL 的 `sys_exec()` 函数来执行 shell 命令并将结果存储在变量 `@result` 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值