从外壳脚本向Python传递参数

时间:2019-06-13 03:45:32

标签: python sh

我遇到了一些类似的问题,但似乎都没有回答我的疑问,我正在尝试将参数从bash脚本传递给python脚本。我没有看到错误,也没有得到所需的输出。我在这里做什么错了?

python:


import os
import glob
import unicodecsv as csv
import pandas as pd
import codecs
import sys




OUTPUT_PATH=sys.argv[2] 


def createFolder(directory):
  # print('createFolder')
  try:
        if not os.path.exists(directory):
            # print('createFolder')
            os.makedirs(directory)
            # print(directory)
  except OSError:
        print ('Error: Creating directory. ' +  directory)
createFolder(OUTPUT_PATH + 'csv20_out/')

bash脚本:

INPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/'
OUTPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/'

cd /
cd home/pg/Documents/LMS/kanjiforbeginner/convertToYAML/


cd converts_csv642csv20
python csvFile.py $INPUT_PATH $OUTPUT_PATH

应该创建一个文件夹csv20_out

当我打印OUTPUT_PATH时,我得到的是'home / pg / Public / test_data / test0002_2files_to_1flow /'

3 个答案:

答案 0 :(得分:2)

sys.argv的内容如下:

['csvFile.py', 'inputPath', 'outputPath']

要获取outputPath,您需要访问sys.argv [2]。

答案 1 :(得分:0)

按照惯例,第一个参数是程序本身的名称,即在命令行(whatever_name.py)上指定的第一件事。

因此argv[0]是程序的名称,argv[1]是您的输入路径,而argv[2]是您的输出路径。

答案 2 :(得分:0)

因此,正如其他评论者所指出的那样,您需要使用argv[2]而不是argv[1] 这是因为在bash中,argv[0]是正在执行的python脚本,而在您的情况下,argv[1]变成了'$INPUT_PATH'

但是,那不能解决您的问题。 在脚本中,您需要删除'$INPUT_PATH周围的$OUTPUT_PATH,以便最后一行变为
python csvFile.py $INPUT_PATH $OUTPUT_PATH

'$INPUT_PATH'string $INPUT_PATH发送到您的python脚本,而

$INPUT_PATH发送'home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/'

或您选择分配给$INPUT_PATH的任何值

最后,您需要更改$INPUT_PATH$OUTPUT_PATH的值
INPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/' OUTPUT_PATH='home/pg/Public/test_data/test0002_2files_to_1flow/'

需要成为

INPUT_PATH='/home/pg/Public/test_data/test0002_2files_to_1flow/csv64_in/' OUTPUT_PATH='/home/pg/Public/test_data/test0002_2files_to_1flow/'

开头的/提供了目录或文件的完整路径,如果您不使用/,则它将成为相对路径。

在bash脚本中,结果是使用cd浏览文件夹

'home/pg/Public/test_data/test0002_2files_to_1flow/csv_out'

将在目录

下创建

home/pg/Documents/LMS/kanjiforbeginner/convertToYAML/

如前所示,在/$INPUT_PATH的开头添加$OUTPUT_PATH可以确保您的代码:

  • 在正确的目录中搜索输入
  • 在正确的目录中创建文件夹

编辑:

正如Kim在下面建议的那样,脚本的最后一行应为:

python csvFile.py "$INPUT_PATH" "$OUTPUT_PATH"

这是在$INPUT_PATH$OUTPUT_PATH带有空格或特殊字符的情况下。