1. ホーム
  2. python

[解決済み] Pythonで予期しないトークン`;'付近で構文エラーが発生する

2022-02-08 09:29:40

質問

私はPythonの初心者なので、どうか助けてください...。

#!/usr/bin/python -tt

import sys
import commands

def runCommands():
  f = open("a.txt", 'r')
  for line in f:  # goes through a text file line by line
    cmd = 'ls -l ' + line 
    print "printing cmd = " + cmd,
    (status, output) = commands.getstatusoutput(cmd)
  if status:    ## Error case, print the command's output to stderr and exit
      print "error"
      sys.stderr.write(output)
      sys.exit(1)
  print output
  f.close()

def main():
  runCommands()

# Standard boilerplate at end of file to call main() function.
if __name__ == '__main__':
  main()

次のように実行しています。

$python demo.py
sh: -c: line 1: syntax error near unexpected token `;'
sh: -c: line 1: `; } 2>&1'
error

実行中 less $(which python) は言う。

#!/bin/sh bin=$(cd $(/usr/bin/dirname "$0") && pwd) exec -a "$0" "$bin/python2.5" "$@"

を削除すると for loop とすると、正常に動作します。

$cat a.txt
dummyFile


$ls -l dummyFile
-rw-r--r-- 1 blah blah ...................

$python demo.py
printing cmd = ls -l dummyFile
sh: -c: line 1: syntax error near unexpected token `;'
sh: -c: line 1: `; } 2>&1'
error

ls'を使っているのは、問題を示すためだけです。実際には、私はいくつかの内部シェルスクリプトを使用したいので、私はこの方法だけでこのPythonスクリプトを実行する必要があります。

どのように解決するのですか?

この行が原因です。

    cmd = 'ls -l ' + line

に修正する必要があります。

    cmd = 'ls -l ' + line.strip() 

あなたが 読む を読むと、テキストファイルの末尾の \n . 必要なのは ストリップ を使用すると、動作するようになります。その getstatusoutput() は、末尾の改行が好きではありません。このインタラクティブなテスト(私が検証した方法です)をご覧ください。

In [7]: s, o = commands.getstatusoutput('ls -l dummyFile')

In [8]: s, o = commands.getstatusoutput('ls -l dummyFile\n')
sh: Syntax error: ";" unexpected