将文件路径从Python传递到shell脚本

2024-09-25 02:26:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我想在Linux中运行Python 3的shell脚本,传递两个参数,其中包含指向两个不同文件的文件路径。然后,shell脚本调用用Python 2编写的程序

在Python 3中,我这样调用shell脚本:

import os
import sys    
os.chmod('/path/to/sh', 0o777)
subprocess.call(['/path/to/sh', '/path/to/file1', '/path/to/file2'], shell=True)

我的shell脚本如下所示:

#!/bin/sh
set -x
path1=$1
path2=$2
python2 path/to/programme "$path1" "$path2"

现在,文件路径为空,shell脚本返回类似python2 path/to/programme '' ''的内容。有人知道我如何正确地传递文件路径,以便用Python 2编写的程序能够读取它们吗

或者有没有更简单的解决方案,比如使用subprocess直接调用用Python 2编写的程序


Tags: 文件topathimport路径程序脚本os
2条回答

不需要shell脚本。您可以使用subprocess直接运行python2

a.py

#!/usr/bin/env python3

import subprocess

subprocess.call(['python2', './b.py', 'foo', 'bar'])

b.py

#!/usr/bin/env python2

import sys

print sys.argv

运行./a.py输出['./b.py', 'foo', 'bar']

您也可以尝试改用past.translation

The past module provides an experimental translation package to help with importing and using old Python 2 modules in a Python 3 environment.

shell=True仅当您执行以下操作时才需要

subprocess.run("/path/to/sh /path/to/file1 /path/to/file2", shell=True)

shell将单个字符串拆分为参数,这些参数将标识为程序名及其参数。但是您已经识别了程序名及其参数,所以

subprocess.run(['/path/to/sh', '/path/to/file1', '/path/to/file2'])

这就是你所需要的


通过使用列表shell=True,本质上就是要求Python执行

sh -c /path/to/sh /path/to/file1 /path/to/file2

它使用/path/to/file1在要执行的命令中设置$0的值,而不是$1

相关问题 更多 >