title: Using exec() to run python script in PHP
body: <p>I want the user to upload a file and then a php file checks if it is valid or not. My problem is in running the script_template.py , i used the function exec() to run in command line but it does not return something and i don't understand why. Thanks in advance. I am using xampp.</p>
  
  <p>index.html</p>
  
  <pre><code>&lt;form id="upload" method="post" action="upload.php" enctype="multipart/form-data"&gt;
              &lt;div id="drop"&gt;
                  Drop Here
  
                  &lt;a&gt;Browse&lt;/a&gt;
                  &lt;input type="file" name="upl" multiple /&gt;
              &lt;/div&gt;
  
              &lt;input type="submit" value="Upload Image" name="submit"&gt;
          &lt;/form&gt;
  </code></pre>
  
  <p>php file</p>
  
  <pre><code>$allowed = array('png', 'jpg', 'gif','txt','xlsx','xls');
  
  
  if(isset($_FILES['upl']) &amp;&amp; $_FILES['upl']['error'] == 0){
  
  
      $extension = pathinfo($_FILES['upl']['name'], PATHINFO_EXTENSION);
  
      if(!in_array(strtolower($extension), $allowed)){
          echo '{"status":"error"}';
          echo ' &lt;p&gt;The uploaded file extension is incorrect, please try again with the correct file &lt;/p&gt;'; 
          exit;
      }
  
  
   $x=file_validation ( $_FILES['upl']['tmp_name'] )  ;
  echo $x;
  
  
      if(move_uploaded_file($_FILES['upl']['tmp_name'], 'uploads/'.$_FILES['upl']['name'])){
          echo '{"status":"success"}';
          exit;
      }
  }
  
  echo '{"status":"error"}';
  echo 'erro';
  exit;
  
  
  
  function file_validation($fich) {
      $validation= exec('python script_template.py '.$fich) ;
      echo $validation ;
      }
  </code></pre>
  
  <p>python file</p>
  
  <pre><code>#!C:\Python27\python.exe
  print "Content-Type: text/html\n"
  
  import sys
  fich_input= sys.argv[1]  
  print fich_input
  
  
  def header(fich):
      """
      Extracts the header and it's values from tab separated file
      Requires: fich is tab separated file
      Ensures: dic and aux are dictionaries, where aux associates each header to it's order
      and dic associates each header value to the order number.
      """
      input_fil=open(fich,'r')
      contador_linha=0
      lines =input_fil.readlines()
      dic={}
      aux={}
      for line in lines:
  
          contador_linha+=1
          line_words=line.split('\t')
          if contador_linha==1: #header
              aux_counter=1
              header_len=len(line_words)
              for elem in line_words:
                  if elem != '\n':
                      aux[aux_counter]=elem
                      aux_counter+=1
  
  
          elif contador_linha==2:#create values for keys in header
              aux_counter=1
              for elem2 in line_words:
  
                  if elem2 != '\n':
  
                      dic[aux_counter]=[elem2]
  
                      aux_counter+=1
  
      return (aux,dic)
  
  
  
  def header_value(dic1,dic2):
      """
      joins header and it's value
      Requires: dic1 is aux from header(fich) and dic2 is dic from header(fich)
      Ensures: final_dic is a dictionary which associates eache header to value
      """
      final_dic={}
      header_len=len(dic1.keys())
      for number in range(1,header_len+1):
  
  
          final_dic[dic1[number]]=dic2[number]
      return final_dic
  
  
  
  def mol_name(final_dic):
      """
      Finds molecule name for just labelling
      Requires: final_dic is a dictionary returned by header_value
      Ensures: string representing molecule name
      """
      return final_dic['Mol_name'] 
  
  def print_info(final_dic):
      """
      prints in the screen all information contained in the file given by researcher
      Requires: final_dic from header_value
      Ensures: information in the screen
      """
      print str(mol_name(final_dic))
      for key in final_dic:
          print key,':',final_dic[key]
  
      print '\n'
  
  
  
  def general_operation(fich):
      """
      Gathers information required to start database operations and if not give an error
      Requires: fich is a Tab separated file, dic12 is 
      Ensures: Crucial information to database operations
      """
      dics=header(fich)
  
      header_values= header_value(dics[0],dics[1])
  
      type_file=''
      if len(header_values) &lt; 21 :
             type_file='no_ref'
      else:
             type_file='ref'
  
  
      return (type_file,header_values)
  
  
  print 'yes'
  print general_operation(fich_input)       
  </code></pre>
  
  <p>The python script is running just fine, php simply ignores it.</p>