A execução do script bash via python fornece um erro de sintaxe

1

Então, estou tentando criar um arquivo via Python. O código é algo assim:

import os
source = 'source /home/software/cadence/release2013/setup/xyz.setup p'
os.system(source)

Isso fornece o seguinte:

/home/software/cadence/release2013/setup/xyz.setup: line 23: syntax error near unexpected token '$HT'
/home/software/cadence/release2013/setup/xyz.setup: line 23: 'switch ($HT)'

Agora, garanto-lhe. Não há nada errado com xyz.setup. Tem sido originado inúmeras vezes e por muitas pessoas. Além disso, quando eu diretamente a fonte via terminal

source /home/software/cadence/release2013/setup/xyz.setup p
 Program Research license set

Funciona muito bem!  Estou perplexo Alguém pode ajudar? Se não desta forma, existe algum outro método para fazer isso. Eu tentei subprocess.call , no entanto, o argumento não pode ser passado para o arquivo.

Aqui está xyz.setup mesmo que definitivamente não seja um erro.

#Source script for blabla
# Use an argument to determine the type 

set fl=false
set Usage = "Usage: source /imec/software/cadence/release2013/setup/blabla.csh [e|c|p|com]"

if ($# != 1) then
 echo ""
 echo "$Usage"
 echo " with:   e -> Educational research"
 echo "     c -> Cadence Academic Network (CAN)"
 echo "     p -> Program Research"
 echo "     com -> Commercial license"
 exit 1
else
 set option=
 set fl=true
endif

set OK = false
setenv HT '/usr/local/bin/hosttype'

switch ($HT)
 case LINUX
  switch ('uname -m')
   case x86_64
    setenv CDS_AUTO_64BIT ALL
    set OK = true
    breaksw
   case i686
    set OK = true
    breaksw
   default:
    echo "Not the correct operating system, LINUX 64bit required (x86_64)"
    exit 1
    breaksw
  endsw
  breaksw
 default:
  echo "Not the correct operating system, LINUX 64bit required (x86_64)"
  exit 1
  breaksw
endsw


#if ($fl == true) then
  switch ($option)
    case e
      setenv xuxnxu 34234@dfsdfds3
      echo " license is set"

    case E
      setenv xuxnxu 34234@dfsdfds3
      echo " license is set"
      breaksw

    case c
      setenv xuxnxu 34234@dfsdfds3
      echo "CAN license set"
      breaksw

    case C
      setenv xuxnxu 34234@dfsdfds3
      echo "CAN license set"
      breaksw

    case p
      setenv xuxnxu 34234@dfsdfds3
      echo "Program Research license set"
      breaksw

    case P
      setenv xuxnxu 34234@dfsdfds3
      echo "Program Research license set"
      breaksw

    case com
      setenv xuxnxu 34234@dfsdfds3
      echo "Commercial license set"
      breaksw

    case COM
      setenv xuxnxu 34234@dfsdfds3
      echo "Commercial license set"
      breaksw

    default:
      set fl=false
      echo "Not the correct option specified"
      echo "$Usage"
      breaksw
  endsw
#endif



#bla bla 
setenv CDS_INST_DIR /home/software/cadence/release2013/bla bla
setenv CDS_DFII_BIN $CDS_INST_DIR/tools/dfII/bin
setenv CDS_FLEX_BIN $CDS_INST_DIR/tools/bin



set path= ($CDS_INST_DIR/tools/dfII/bin \
           $CDS_INST_DIR/tools/bin \
       /home/software/cadence/release2013/bla bla/tools/bin $path)


#echo "Cadence setup bla bla bla sourced"
    
por pkmanu1988 17.02.2016 / 17:11

1 resposta

1

Seu script está na sintaxe csh , mas o os.system chama o shell padrão /bin/sh . Se você quiser que seu script seja interpretado corretamente, use

subprocess.call(['/bin/csh','-c','source /home/software/cadence/release2013/setup/xyz.setup'])
    
por Sergiy Kolodyazhnyy 17.02.2016 / 19:54