【问题标题】:Windows "No such file or directory"Windows“没有这样的文件或目录”
【发布时间】:2019-11-28 22:50:52
【问题描述】:

我正在尝试从我的 Python 代码运行一个 bash 脚本。我在这样的子进程中调用脚本:

preprocessed = subprocess.check_output([
    'bash',
    '../Paraphrase_Demo/models/processing_utils/preprocess_data_givenBPE.sh',
    phrase, src_lang, tgt_lang, this_dir
])

这里是脚本 preprocess_data_givenBPE.sh:

#!/usr/bin/env bash

REMOTE_PATH=$4/processing_utils
SCRIPTS=$REMOTE_PATH/tiny-moses
TOKENIZER=$SCRIPTS/tokenizer.perl
DETOKENIZER=$SCRIPTS/detokenizer_v2.perl
CLEAN=$SCRIPTS/clean-corpus-n.perl
NORM_PUNC=$SCRIPTS/normalize-punctuation.perl
REM_NON_PRINT_CHAR=$SCRIPTS/remove-non-printing-char.perl
BPEROOT=$4/zhen/tools/subword-nmt/subword_nmt

text=$1
flan=$2
BPE=$4/$2$3/data/bpecodes

echo $text | perl $NORM_PUNC -l $flan | perl $REM_NON_PRINT_CHAR |
perl $TOKENIZER -a -l $flan -q | python3 $BPEROOT/apply_bpe.py -c $BPE | cat

当我运行我的 Python 程序时,我得到以下输出:

Can't open perl script "C:/Users/Administrator/source/repos/Paraphrasing/Paraphrase_Demo/models/processing_utils/tiny-moses/normalize-punctuation.perl": No such file or directory
Can't open perl script "C:/Users/Administrator/source/repos/Paraphrasing/Paraphrase_Demo/models/processing_utils/tiny-moses/remove-non-printing-char.perl": No such file or directory
Can't open perl script "C:/Users/Administrator/source/repos/Paraphrasing/Paraphrase_Demo/models/processing_utils/tiny-moses/tokenizer.perl": No such file or directory
python3: can't open file 'C:/Users/Administrator/source/repos/Paraphrasing/Paraphrase_Demo/models/zhen/tools/subword-nmt/subword_nmt/apply_bpe.py': [Errno 2] No such file or directory

我已将这些路径中的每一个复制并粘贴到 powershell 和 ls'd 以验证它们是否正确,但它仍然说找不到它们。这里发生了什么?如果我直接运行 bash 脚本也会发生这种情况。

编辑:我尝试在路径中使用反斜杠并收到相同的错误。我还发现了这篇文章:Bash: cannot execute a perl script using an absolute path?,所以我尝试使用我的 Bash 脚本目录中的相对路径,但它仍然显示“没有这样的文件或目录。”

【问题讨论】:

  • 要直接运行脚本,您必须在文件扩展名和解释脚本的程序之间建立关联。
  • @MarkRansom,它直接运行python3 $BPEROOT/apply_bpe.py。显示的错误来自 Python,所以我们知道至少有这么多是有效的。
  • OP 说“C:/Users/Administrator/source/repos/Paraphrasing/Paraphrase_Demo/models/zhen/tools/subword-nmt/subword_nmt/apply_bpe.py”存在,但ERROR_FILE_NOT_FOUND (2) 错误另有说明。 “apply_bpe.py”不是保留名称(DOS 设备或尾随空格或点),所以我认为路径有问题。如果这是真实路径,则不是MAX_PATH (260) 长度限制问题,也不是驱动器映射问题,因为它位于系统驱动器上。
  • @eryksun 谢谢,我错过了有关错误消息的详细信息。此时我唯一能想到的就是在文件名中使用`\`而不是`/`。
  • @MarkRansom : 也许你可以考虑使用 os.path.join。

标签: python windows shell subprocess


【解决方案1】:

经过大量调试,我发现了问题。虽然如果我在 powershell 中 ls 它们存在我列出的路径,但在 powershell 中键入 bash 不仅会打开 bash shell,它实际上会更改目录结构。我认为这可能与 Linux 的 Windows 子系统有关,但结果是 C:bash shell 内更改为 /mnt/c。在我的所有路径中替换它,我就可以运行我的脚本了。

【讨论】:

    猜你喜欢
    • 2016-10-07
    • 1970-01-01
    • 2021-06-24
    • 2020-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多