Il secondo codice era quasi corretto, l'errore deriva dal fatto che hai cercato di comunicare con il processo passando una stringa (che in Python 3 è una sequenza di caratteri Unicode), mentre per comunicare su stdin/stdout si lavora con sequenze di byte. Per convertire una stringa in sequenza di byte devi usare il metodo encode() (di default usa l'encoding "di sistema", che nel tuo caso dovrebbe andare bene, in altri casi può essere necessario specificare l'encoding da usare).
codice:
            proc.communicate(('source ' + fileSql).encode())[0]